3

我有一个 UITableView,我想以与联系人应用程序类似的方式工作,因为有一个编辑按钮,单击该按钮可将单元格转换为编辑单元格。

目前它们是使用单元格样式“左细节”设置的,我已经覆盖了 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];
    }
}

在我的方法中,我的代码取自另一个有效的问题.. 有点(它在错误的位置动态创建了一个新的可编辑文本字段并且不隐藏标签)。 编辑前 编辑期间 编辑后

苹果指南不够具体,我无法理解如何开发视图。

4

2 回答 2

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/

于 2012-10-11T13:02:59.180 回答
0

我有一个解决方法。

如果我创建一个自定义行并使其看起来与“左侧详细信息”样式相同,但使用右侧的文本视图而不是标签,我可以更改视图的“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;
}

一 二 三

于 2012-10-11T13:54:54.917 回答