ios - 如何让用户修改 UITableView 单元格中的文本

标签 ios xcode uitableview

我有一个关于合适 View 的问题。

我正在实现一个类似于地址簿应用程序的应用程序。我能够在编辑模式下显示表格 View 。我想让用户在编辑模式下编辑单元格中的文本。我知道为了编辑单元格中的文本,我需要一个文本字段。我创建了一个文本字段。

我的问题是:

  1. 我应该怎么做才能在单元格中显示该文本字段。

  2. 为了在编辑模式下在 TableView 中显示该文本字段,我需要实现哪些方法。

  3. 完成编辑后,如何更新我的联系人 View Controller 中的数据(包含所有联系人)。保存应该保留在地址簿中。对于这个问题,我知道我需要实现一些委托(delegate)方法,但我不确定该怎么做。

请看下面的代码,这样你就会对我的问题有一个想法。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
[tableView setSeparatorColor:[UIColor clearColor]];
//[self.tableView setEditing: YES  animated: YES];


static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell...
if(isEditingOn) {

if(cell == nil)
        cell = [self getCellContentView:CellIdentifier];
     UILabel *lblTemp1 = (UILabel *)[cell viewWithTag:1];
     UITextField *textfield1=(UITextField*)[cell viewWithTag:2];

if(indexPath.row == 0) {
        lblTemp1.text = @"Name";
        textfield1.text = myContact.name;
    }

else if(indexPath.row == 1) {
        lblTemp1.text = @"Phone";
        textfield1.text = myContact.phone;
    }

else if(indexPath.row == 2) {
        lblTemp1.text = @"Email";
        textfield1.text = myContact.email;
}

}

else {    

if(indexPath.row == 0) {
    cell.textLabel.text = myContact.name;
}

else if(indexPath.row == 1) {
    cell.textLabel.text = myContact.phone;
}

else if(indexPath.row == 2) {
    cell.textLabel.text = myContact.email;
}
}


return cell;

- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {

CGRect CellFrame = CGRectMake(0, 0, 60, 20);
CGRect Label1Frame = CGRectMake(10, 10, 180, 25);
UILabel *lblTemp;
UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CellFrame  reuseIdentifier:cellIdentifier] autorelease];
lblTemp = [[UILabel alloc] initWithFrame:Label1Frame];
lblTemp.tag = 1;
[cell.contentView addSubview:lblTemp];
[lblTemp release];
CGRect TextFieldFrame=CGRectMake(240, 10, 60, 25);
UITextField *textfield;
textfield=[[UITextField alloc]initWithFrame:TextFieldFrame];
textfield.tag=2;
textfield.placeholder = @"";
[cell.contentView addSubview:textfield];

}

最佳答案

要通过代码示例全面深入地回答这个问题,这是一个非常复杂的问题,但我会尽力为您指明正确的方向。

1) 当您在 tableView:cellForRowAtIndexPath: 方法中创建单元格时,添加一个 UITextField 作为表格单元格的 subview (我假设这就是您的 getCellContentView: 方法的用途)。在您的 UITextField 上设置一个与单元格的行索引匹配的标签,并使您的 tableviewcontroller 成为单元格的委托(delegate)。将文本字段设置为隐藏。 (请记住在每次请求单元格时设置标签,而不仅仅是在您第一次创建它时)。

2) 在 tableView:didSelectRowAtIndexPath: 方法中,使用 tableViewCellForRowAtIndexPath 获取单元格,然后显示其中的文本字段(您可能需要进行一些 View 遍历才能获取它)并在文本字段上调用 ​​becomeFirstResponder。

3) 当用户输入内容时,将触发您的 textfielddelegate 方法。您可以查看文本字段上的标签以确定该字段属于哪一行,然后使用新文本更新数据源。然后只需重新加载表格以隐藏文本字段并更新单元格内容。

如果您知道如何使用自定义表格单元格子类,那么您可以通过创建一个已经包含文本字段并具有用于访问它的属性的自定义单元格来让您的生活变得更轻松,但除此之外的技术将基本相同。

此外,tableView:didSelectRowAtIndexPath: 通常不会在 tableview 处于编辑模式时触发,除非您设置 tableView.allowsSelectionDuringEditing = YES;

关于ios - 如何让用户修改 UITableView 单元格中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8858228/

相关文章:

xcode - 删除 xcode 键绑定(bind)

ios - 将 UITableViewController 显示为弹出窗口,同时在弹出窗口中显示详细信息

java - 获取具有某些条件的 tableView 项目的特定行(JavaFX)

ios - popToRootViewControllerAnimated 使我的应用程序崩溃

objective-c - AudioPlayer 不在第二个 View Controller 上播放

ios - swift IOS TextArea 我可以从偏移量或光标中删除文本吗

swift - 在 Swift 3 中使用 UITableView 和 IndexPath 显示错误

ios - 如何在不越狱手机的情况下使用私有(private) api 获取传入和传出的短信/iMessage 计数

iOS 在开发者门户中添加设备

ios - 我们什么时候应该在 Xcode 中使用 "embedded binaries"而不是 "Linked Frameworks"?