【问题标题】:Allow a user to edit the text in a UITableView cell允许用户编辑 UITableView 单元格中的文本
【发布时间】:2012-02-01 02:55:09
【问题描述】:

我正在我的 tableview 应用程序中创建一个“最喜欢的页面”菜单,用户可以在其中保存他们最喜欢的网页,然后通过菜单更轻松地导航到它们。

为了便于记住哪个链接是哪个,我想让用户单击一个“编辑”按钮,以某种方式选择他们想要编辑名称的单元格,然后输入新名称并拥有单元格将自身重命名为用户输入的内容。我目前正在使用内置的设置应用程序来保存链接数据。

我不需要知道我刚才询问的所有方面。我只想知道用户是否可以编辑表格视图的单元格文本,以及我会使用什么方法。

我看到过其他类似的问题,但通常是从更加程序化的基础出发。

【问题讨论】:

标签: objective-c ios cocoa-touch uitableview


【解决方案1】:

用户不能直接编辑表格视图的单元格文本。 (从技术上讲,它将是 cell.textLabel.text)。但是,如果他们进入“编辑”模式,您可以轻松地在预填充当前值的单元格(或模式视图)中显示 UITextField,让他们编辑、保存然后更新 cell.textLabel。文本值自己。

【讨论】:

    【解决方案2】:

    您的UITableView 单元通常在此处创建

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    

    UITableView 的代表之一)。

    因此,如果您将UITableViewCell 子类化并公开text 属性,则可以做您想做的事情,包括在单元格中保存UITextField 实例。确保像往常一样使用出队的东西。

    然后,当用户触摸UITableViewCell 时,您可以给UITextField 焦点:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [self.thatTextFieldIMentioned becomeFirstResponder];
    }
    

    如果您将UITableViewCell 子类设为UITextFieldDelegate 并使其成为文本字段的委托,您可以轻松处理这些令人讨厌且难以记住的方法:

    - (void)textFieldDidEndEditing:(UITextField *)textField {
        NSLog(@"yeah inform someone of my change %@", textField.text);
    }
    
    - (BOOL)textFieldShouldClear:(UITextField *)textField {
        return YES;
    }
    
    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        [textField resignFirstResponder];
        return YES;
    }
    

    【讨论】:

      【解决方案3】:

      所以,我认为最好的方法是使用 tabelview 单元格编辑样式。 您可以使用 tableview 委托设置单元格编辑样式。当用户编辑单元格时,您可以做您想做的事情。 设置单元格样式:

      - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
      
      - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
      

      当用户点击编辑按钮时执行的操作:

      - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
      

      【讨论】:

      • 这不是同一种“编辑”——这种编辑是指移动单元格,或者删除它。
      • -1 表示@Rayfleck 所说的。删除这个答案可能是正确的响应,或者您可以响应 cmets。
      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2020-03-28
      • 1970-01-01
      相关资源
      最近更新 更多