UITableView需要看起来像是在场地编辑的联系人

时间:2012-10-11 12:44:51

标签: ios iphone uitableview ios6

我有一个UITableView,我希望以类似于联系人应用程序的方式工作,因为有一个编辑按钮,点击它时会将单元格转换为编辑单元格。

目前他们使用单元格样式'left detail'进行设置,我已经覆盖了setEditing方法,但是我不知道如何转换单元格。

此处的其他一些答案包括“监视表格视图的编辑属性发生变化时(按下编辑按钮时)。然后在代表方法中添加代码,以不同的方式组合,绘制和缩进单元格,当表格视图正处于编辑模式。“这正是我想要的,但不知道该怎么做。

- (void)setEditing:(BOOL)flag animated:(BOOL)animated
{
    [super setEditing:flag animated:NO];
    if (flag == YES){
        // Change views to edit mode.
        self.textField = [[UITextField alloc] initWithFrame:[_titleLabel frame]];
        [self.textField setText:_titleLabel.text];
        [self.view addSubview:self.textField];           
    }
    else {
        // Save the changes if needed and change the views to noneditable.
        [_titleLabel setText:self.textField.text];
        [self.textField removeFromSuperview];
    }
}

在我的方法中,我从another question获取的代码可以工作..有点(它会在错误的位置动态创建一个新的可编辑文本字段,并且不会隐藏标签)。 Before edit During edit After edit

apple guidelines对我来说不够具体,无法理解如何开发视图。

2 个答案:

答案 0 :(得分:0)

简而言之,它的工作方式是在整个UITableView上设置一个编辑标志,然后实现UITableViewDataSource协议中声明的几个方法(canEditRowAtIndexPath,commitEditingStyle)正在编辑细胞。

首先,您需要将UITableVIew置于编辑模式。您希望在工具栏按钮的处理程序中执行此操作:

[self.tableView setIsEditing:YES animated:NO];

然后,tableview将调用canEditRowAtIndexPath来确定是否可以编辑该行:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

最后,当用户完成编辑时,会调用此方法:

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

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html

这里有另一个例子:

http://www.behindtechlines.com/2012/06/02/enabling-configuring-uitableview-edit-mode/

答案 1 :(得分:0)

我有一个解决方法。

如果我创建一个自定义行并使其看起来与“左侧细节”样式相同,但使用右侧的textview而不是标签,我可以更改视图的“seteditable”和“setenabled”字段所以在编辑时他们允许编辑。我已经破解了字体颜色,因此在单击编辑时它会发生变化,因此用户可以看到它现在可以编辑。

这看起来非常混乱 - 所以我仍然在寻找最佳方法。

- (void)setEditing:(BOOL)flag animated:(BOOL)animated
{
    [super setEditing:flag animated:NO];
    if (flag == YES){        
        [self.tableView setEditing:YES animated:NO];
        [self.sampleLabel setEnabled:YES];
        [self.sampleLabel setTextColor:[UIColor blackColor]];
    }
    else {
        [self.sampleLabel setEnabled:NO];
        [self.sampleLabel setTextColor:[UIColor darkGrayColor]];
    }
}

- (void)configureView
{
    self.titleLabel.text = [[self.detailItem valueForKey:@"title"] description];
    self.ticketNumberLabel.text = [[self.detailItem valueForKey:@"reference"] description];
    self.detailsLabel .text = [[self.detailItem valueForKey:@"details"] description];
    self.sampleLabel.text = [[self.detailItem valueForKey:@"reference"] description];

    // initially set labels to not be editable
    [self.detailsLabel setEditable:NO];
    [self.sampleLabel setEnabled:NO];

}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    // item can't be deleted now
    return NO;
}

one two three