IPhone UITableView显示删除按钮时抑制披露按钮

IPhone UITableView显示删除按钮时抑制披露按钮,iphone,cocoa-touch,uitableview,Iphone,Cocoa Touch,Uitableview,我有一个UITableView,每行都有一个披露按钮。当表格进入编辑模式并按下删除控制按钮(“-”号)时,删除按钮会显示,但不会替换披露按钮,而是滑动到删除按钮的左侧 appleUITableView指南解释了代理的所有内容,除了在按下“-”符号但显示删除按钮之前调用的代理 我只想在显示“删除”按钮时抑制披露指示器 我猜我错过了什么。。。我已在编辑时设置了sethidesaccessorywhen:NO 在表格的单元格上显示该指示器,以便向用户指示,如果用户选择该行,则可以编辑该行 我试图复制的

我有一个
UITableView
,每行都有一个披露按钮。当表格进入编辑模式并按下删除控制按钮(“-”号)时,删除按钮会显示,但不会替换披露按钮,而是滑动到删除按钮的左侧

apple
UITableView
指南解释了代理的所有内容,除了在按下“-”符号但显示删除按钮之前调用的代理

我只想在显示“删除”按钮时抑制披露指示器

我猜我错过了什么。。。我已在编辑时设置了
sethidesaccessorywhen:NO
在表格的单元格上显示该指示器,以便向用户指示,如果用户选择该行,则可以编辑该行

我试图复制的行为是在编辑联系人时在联系人应用程序中完成的。任何帮助都将不胜感激


谢谢,Greg

披露指标由
tableView:accessorytypeforrowwithindexath:
管理,因此您可以在编辑模式下更改附件类型

我相信有一个
tableView:accessoryButtonTappedForRowWithIndexPath:
,也许在那里你可以注意到你将要编辑模式,然后更改
tableView:accessoryTypeForRowWithIndexPath:
为每一行返回的内容-在编辑模式下没有附件

我想试试


下面是一个调用序列(不确定是否有帮助)说明/教程/示例,来自Apple reference,关于如何进行操作。

执行此操作的标准方法是使用
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兼容,但一定值得一试…

我对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; } } } -(void)observeValueForKeyPath:(NSString*)对象的键路径:(id)对象 更改:(NSDictionary*)更改上下文:(void*)上下文 { UITableViewCell*单元格=对象; if([keyPath IsequalString:@“showingDeleteConfirmation”]) { BOOL isShowing=[[ChangeObjectForkey:NSKeyValueChangeNewKey]boolValue]; 如果(!isShowing) { cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator; } 其他的 { cell.accessoryType=UITableViewCellAccessoryNone; } } }
或者在创建单元格时,可以定义附件类型:cell.editingAccessoryType=UITableViewCellAccessoryNone

吉姆,工作很有魅力!我真的很感谢你花时间回复。。。谢谢,GregIn,如果您的解决方案中出现任何人,请添加:UITableViewCell*cell=object;另外:更改if(isShowing)->if(!isShowing)…谢谢,我已经更新了答案以包含这些内容。就我个人而言,我喜欢使用“==NO”而不是使用!在前面,除非有特定的编译器支持布尔类型(如在C++中)。ObjC中的BOOL类型只是一个typedef(我以前被字号大小的东西和与字符大小BOOL的比较咬过)。就我个人而言,我总是尝试先用这样简单的if陈述积极的情况,然后你甚至不需要否定。您还可以在集合中内联if。accessoryType=isShowing。。。