我有一个UITableView
,每行都有一个披露按钮。当表格进入编辑模式并按下删除控件(“ - ”符号)时,删除按钮会显示,但是不会替换显示按钮,而只是滑动到删除按钮的左侧。
苹果UITableView
指南解释了代表所看到的一切,除了按下“ - ”符号时调用的代理,但显示删除按钮之前。
我想在显示删除按钮时取消显示内容。
我猜我错过了什么......我设置了setHidesAccessoryWhenEditing:NO
在表的单元格上,以便显示指示符以向用户指示如果他们选择该行,他们可以编辑它...
我正在尝试复制的行为是在编辑联系人时在联系人应用中完成的。任何帮助将不胜感激......
谢谢,Greg
答案 0 :(得分:4)
执行此操作的标准方法是使用cell.hidesAccessoryWhenEditing = YES
,并且编辑是一种模式操作,通常会禁用导航。
“联系人”应用程序实际上使用自定义表格单元格,如果没有那么多使用附件,我会不会感到惊讶,因为在单元格的右边缘有一个图像,从其行为来判断。
如果您想知道删除按钮何时出现,我建议您尝试在单元格的showingDeleteConfirmation
属性上安装键值观察器,如下所示:
[cell addObserver: self forKeyPath: @"showingDeleteConfirmation"
options: NSKeyValueObservingOptionNew context: NULL];
然后实现观察者回调方法:
- (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object
change: (NSDictionary *) change context: (void *) context
{
if ( [keyPath isEqualToString: @"showingDeleteConfirmation"] )
{
UITableViewCell * cell = (UITableViewCell *) object;
BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue];
if ( isShowing == NO )
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
else
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
我应该注意到,我不确定UITableViewCell类是否符合KVO标准,但是它值得一试......
答案 1 :(得分:2)
或者在创建单元格时,您可以定义附件类型:cell.editingAccessoryType = UITableViewCellAccessoryNone;
答案 2 :(得分:1)
披露指标由tableView:accessoryTypeForRowWithIndexPath:
管理,因此您可以在编辑模式下更改配件类型。
我相信有一个tableView:accessoryButtonTappedForRowWithIndexPath:
,也许你可以注意到你要进行编辑模式,然后更改每行tableView:accessoryTypeForRowWithIndexPath:
返回的内容 - 在编辑模式下没有附件。
我会尝试一下。
这是一个调用序列(不确定是否有帮助)来自Apple参考的描述/教程/示例关于如何进行Inserting and Deleting Rows in Editing Mode。
答案 3 :(得分:1)
我对Jim的解决方案的评论并没有得到很好的解决......这是为我解决问题的版本......再次感谢Jim!
- (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object change: (NSDictionary *) change context: (void *) context { UITableViewCell * cell = object; if ( [keyPath isEqualToString: @"showingDeleteConfirmation"] ) { BOOL isShowing = [[change objectForKey: NSKeyValueChangeNewKey] boolValue]; if ( !isShowing ) { cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } else { cell.accessoryType = UITableViewCellAccessoryNone; } } }