当显示删除按钮时,IPhone UITableView 抑制显示按钮
Posted
技术标签:
【中文标题】当显示删除按钮时,IPhone UITableView 抑制显示按钮【英文标题】:IPhone UITableView suppress disclosure-button when Delete Button is displayed 【发布时间】:2009-05-19 00:14:06 【问题描述】:我有一个UITableView
,每一行都有一个披露按钮。当表格进入编辑模式并按下删除控件(“-”号)时,会显示删除按钮,但不会替换显示按钮,而是滑到删除按钮的左侧。
苹果UITableView
指南解释了代表的所有内容,除了在按下“-”符号时调用的代表,但在显示删除按钮之前。
我只想在显示删除按钮时取消显示指示符。
我猜我错过了一些东西......我已经设置了setHidesAccessoryWhenEditing:NO
在表格的单元格上,以便显示指示器以向用户指示如果他们选择了该行,他们可以对其进行编辑...
我试图复制的行为是在编辑联系人时在联系人应用程序中完成的。任何帮助将不胜感激...
谢谢,格雷格
【问题讨论】:
【参考方案1】:执行此操作的标准方法是使用cell.hidesAccessoryWhenEditing = YES
,并且该编辑是一种模式操作,其中导航通常被禁用。
Contacts 应用程序实际上使用了自定义表格单元格,如果它没有使用附件,而是在单元格的右边缘有一个图像,我不会感到惊讶,从它的行为来看。
如果您想知道删除按钮何时出现,我建议您尝试在单元格的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 兼容,但值得一试……
【讨论】:
吉姆,工作就像一个魅力!非常感谢您抽出宝贵时间回复...谢谢,格雷格 如果有人在您的解决方案中发生任何事情,为了完整起见,请添加: UITableViewCell * cell = object;另外:更改 if ( isShowing ) -> if (!isShowing)... 谢谢,我已经更新了答案以包括那些。我个人喜欢使用 '== NO' 而不是使用 !在前面,除非有特定的编译器支持布尔类型(如在 C++ 中)。 ObjC 中的 BOOL 类型只是一个 typedef(我之前被字大小的东西和与 char 大小的 BOOL 的比较所困扰)。 就我个人而言,我总是尝试先用这样的简单 if 陈述积极的情况,然后你甚至不需要否定。您还可以在集合中内联 if。附件类型 = isShowing ? ... : ...【参考方案2】:或者在创建单元格时,您可以定义附件类型:cell.editingAccessoryType = UITableViewCellAccessoryNone;
【讨论】:
【参考方案3】:披露指示器由tableView:accessoryTypeForRowWithIndexPath:
管理,因此您可以在编辑模式下更改配件类型。
我相信有一个tableView:accessoryButtonTappedForRowWithIndexPath:
,也许你可以注意到你将要进入编辑模式,然后更改tableView:accessoryTypeForRowWithIndexPath:
为每一行返回的内容——在编辑模式下没有附件。
我会试一试的。
这是来自 Apple 参考的关于如何处理 Inserting and Deleting Rows in Editing Mode 的调用序列(不确定是否有帮助)描述/教程/示例。
【讨论】:
【参考方案4】:我对 Jim 的解决方案的评论不是很好...这是为我解决问题的版本...再次感谢 Jim!
- (void)observeValueForKeyPath: (NSString *) keyPath ofObject: (id) object 更改:(NSDictionary *)更改上下文:(void *)上下文 UITableViewCell * 单元格 = 对象; if ( [keyPath isEqualToString: @"showingDeleteConfirmation"] ) BOOL isShowing = [[更改 objectForKey: NSKeyValueChangeNewKey] boolValue]; 如果 ( !isShowing ) cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 别的 cell.accessoryType = UITableViewCellAccessoryNone;【讨论】:
以上是关于当显示删除按钮时,IPhone UITableView 抑制显示按钮的主要内容,如果未能解决你的问题,请参考以下文章