在UITableViewCell中编辑TextLabel

时间:2012-02-09 11:01:47

标签: iphone ios uitableview

  

可能重复:
  How to do edit-in-place in a UITableView?

我是这款iphone开发的新手。 我只是想知道如何在tableView中编辑/更新UITextLabel。

我已经在使用编辑/完成动画并且能够删除行但我无法获得如何编辑这些行中的文本。

我希望用户编辑单元格的文本标签。点击编辑按钮时。

我已经搜索过网站,但无法得到确切答案。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if(!cell)
{
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"]autorelease];
    cell.editingAccessoryType=YES;
}


myTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 6, 241, 31)];
myTextField.backgroundColor = [UIColor clearColor];
myTextField.textAlignment = UITextAlignmentLeft;
myTextField.returnKeyType = UIReturnKeyDone;
myTextField.delegate = self;
cell.accessoryView = myTextField;
myTextField.text = [self.arrayOfItems objectAtIndex:indexPath.row];
myTextField.enabled = NO;
return cell;
}

-(IBAction)Edit:(id)sender
{
if(self.editing)
{
            [myTextField.Enabled = YES];
    [super setEditing:NO animated:NO];
    [self.tab setEditing:NO animated:NO];
    [self.tab reloadData];
    [self.navigationItem.rightBarButtonItem setTitle:@"Done"];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain];
}
else 
{
    myTextField.enabled= YES;

    [super setEditing:YES animated:YES];
    [self.tab setEditing:YES animated:YES];
    [self.tab reloadData];
    [self.navigationItem.rightBarButtonItem setTitle:@"Edit"];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];
 }
 }

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{
if (self.editing == NO || !indexPath) 
return UITableViewCellEditingStyleNone;
if (self.editing && indexPath.row == ([self.arrayOfItems count])) 
{
    return UITableViewCellEditingStyleInsert;
} 
else 
{
    return UITableViewCellEditingStyleDelete;
}
return UITableViewCellEditingStyleNone;
}

这对我不起作用。如果我按下编辑按钮

,文本字段就会消失

4 个答案:

答案 0 :(得分:1)

使用UITextField代替自定义单元格中的UILabel,然后您可以编辑自定义单元格您可以查看Tutorial 或者你也可以查看Apple Sample

答案 1 :(得分:1)

编辑表行中的文本很困难,因为您需要管理键盘并向上滚动可编辑字段以便为键盘等腾出空间(可以在编辑时滚动屏幕等)。此外,如果您使每个单元格都可编辑,则必须管理一个编辑后的值,以便能够在屏幕编辑中间滚动等(即键盘处于活动状态时等等)。

UILabel不可编辑,您需要UITextField来编辑文本。

在表格单元格中实现值的编辑的最佳方法可能是在编辑操作上将新的视图控制器推送到堆栈,并在那里有一个可编辑的文本字段,并向菜单添加保存/取消栏按钮项目该视图控制器。

当用户按下save时,使用适当的文本值更新表视图后面的模型,然后再次将视图控制器弹出堆栈。让包含表的主视图在viewView的viewWillAppear方法中调用reloadData。

这将使您在编辑字段时最简单/最好地控制键盘行为和编辑行为。

答案 2 :(得分:0)

如果您使用的是标准UITableViewCell,则可以执行以下操作:

//Get the first cell of the first section
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:ip];

//Change the textLabel contents
[[cell textLabel] setText@"Updated text"];

//Refresh the tableView
[tableView reloadData];

答案 3 :(得分:-2)

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

cell.textLabel.text = @"my text";

return cell;
}