当显示删除按钮时,IPhone UITableView会禁止显示按钮

时间:2009-05-19 00:14:06

标签: iphone cocoa-touch uitableview

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

苹果UITableView指南解释了代表所看到的一切,除了按下“ - ”符号时调用的代理,但显示删除按钮之前。

我想在显示删除按钮时取消显示内容。

我猜我错过了什么......我设置了setHidesAccessoryWhenEditing:NO 在表的单元格上,以便显示指示符以向用户指示如果他们选择该行,他们可以编辑它...

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

谢谢,Greg

4 个答案:

答案 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;
        }
    }
}