我有一个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获取的代码可以工作..有点(它会在错误的位置动态创建一个新的可编辑文本字段,并且不会隐藏标签)。
apple guidelines对我来说不够具体,无法理解如何开发视图。
答案 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://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;
}