iOS8中出现UITableViewCell编辑模式左圆圈

Posted

技术标签:

【中文标题】iOS8中出现UITableViewCell编辑模式左圆圈【英文标题】:left circle in UITableViewCell editing mode appears in iOS8 【发布时间】:2014-09-12 06:19:16 【问题描述】:

所以我刚刚安装了 Xcode 6GM 并在运行 ios8 的模拟器上摆弄了我的 iOS7 应用程序。

我有一个 UITableView 处于编辑模式,现在单元格左侧有一个圆圈,在 iOS7 上运行时不会出现。

我浏览了 iOS8 的文档,但没有看到任何新常量,我正在使用 UITableViewCellEditingStyleNoneUITableViewCellSelectionStyleNone

当 tableView.editing = NO 时,该圆圈消失,也 allowedMultipleSelectionDuringEditing = YES。

如果有人能告诉我发生了什么,那就太好了:)

编辑:从 XCode6GM 编译到我的运行 iOS7.1 的 iPhone 上也给了我这个圆圈。我怀疑 XCode6GM 有错误?

这是带有圆圈的屏幕截图:

【问题讨论】:

你能显示“左圆”的屏幕截图吗?供您参考,UIView 中添加了一个新属性,用于从它继承的所有对象。它可能是你提到的“左圈”。见:***.com/questions/25762723/… @Ricky 它似乎不是.. 这就像索引为 3 的未记录的 UITableViewEditingStyle 在选择时给你一个带有复选标记的圆圈,除了奇怪的部分是我不能甚至让它“检查”。在我决定在 SO 上发帖之前,我花了一个小时浏览新文档和另一个小时摆弄。 (如果其他人发现这个问题略有不同。)我也被重叠的圆圈所困扰,但就我而言,我想利用它。然后我记得我已经实现了以下内容:- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath return NO; 我将返回更改为YES,一切都很好。 【参考方案1】:

我在将我的应用程序迁移到 iOS8 时遇到了这个烦人的问题。

这是我找到的解决方法...在您的 UITableViewCell 子类中添加类似的内容:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated

    [super setEditing:editing animated:animated];
    for( UIView* subview in self.subviews )
        if( [NSStringFromClass(subview.class) isEqualToString:@"UITableViewCellEditControl"] )
            subview.hidden = YES;

我希望这将很快被记录/修复...

【讨论】:

UITableViewCellEditControl 嗯? wth...但是干得好! :) 这是一个很好的解决方法,当表格的allowMultipleSelectionDuringEditing 设置为YES 时,它似乎是摆脱那些灰色圆圈的唯一方法。我添加了几件小事:首先,通过使用 -if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) 包装仅针对 iOS 8 执行此操作。其次,当第一个子视图被隐藏时,添加一个中断以退出循环。【参考方案2】:

我想我有更好的解决方案,将此代码添加到您的自定义 uitableviewcell:

- (void)addSubview:(UIView *)view 
    [super addSubview:view];
    if( [NSStringFromClass(view.class) isEqualToString:@"UITableViewCellEditControl"] ) 
        view.hidden = YES
    

【讨论】:

这可能有风险,谁知道系统使用该子视图做什么。我更喜欢原始答案,它只是隐藏视图,同时在层次结构中保持完整。 @VitaliTchalov 是的,也许你可以在这里设置它的隐藏属性而不是绕过“addSubview”调用。【参考方案3】:

这是一个结合两个答案的 Swift 解决方案:

override func addSubview(view: UIView) 
    super.addSubview(view)
    if view.isKindOfClass(NSClassFromString("UITableViewCellEditControl")!) 
        view.hidden = true
    

【讨论】:

【参考方案4】:

这里是 Swift3 版本:

override func addSubview(_ view: UIView) 
    super.addSubview(view)
    if view.classAsString() == "UITableViewCellEditControl" 
        view.isHidden = true
    

【讨论】:

UIView 类型的值没有成员 classAsString

以上是关于iOS8中出现UITableViewCell编辑模式左圆圈的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 在 iOS8 的编辑模式下没有裁剪到边界(适用于 iOS7.1)

如何在自定义 UITableViewCell 中控制 UITextFields 的编辑

自定义 UITableViewCell 编辑模式不起作用

包含 UITableView 的 UITableViewCell 的高度(iOS8 和 AutoLayout)

编辑自定义 UITableViewCell 时不出现插入/删除编辑控件

UITableViewCell 中的多行 UILabel 在 iOS8 中使用 autoLayout 给出错误的高度