UITableView的“批量选择”不显示选中圆圈中的选中标记,显示右侧标记而非左侧。

7
我正在尝试在一个iOS8的Swift应用程序中复制这种行为(如下图所示,“邮件多选删除”行为)。当设置为“编辑”时,左侧选择圆圈被呈现出来,但是在选择后它们不会变成蓝色的勾号。(没有任何可见的情况发生,或者它发生在右边...屏幕外。)
从各种谷歌搜索中,我尝试将accessoryType设置为复选框,但它出现在右侧(而不是左侧)。[那是旧建议吗?添加一个勾号仍然是正确的方法吗?]
我已经搜寻了这个示例(甚至下载并运行它,并将其调整到更接近我的代码,它可以工作),但我看不到它和我的应用程序之间的差异。
一些数据点:
  • Xcode 7
  • iOS8 + (测试在8和9上)
  • Swift 2.0
  • Storyboard配置表视图等
  • 自定义布局单元格。它们使用内容视图来显示一些文本,没有超出内容视图的部分。自动布局。
  • 非编辑状态下的单选(或者我认为是这样)
  • 编辑状态下的多选(以实现此效果)。
  • 数据源返回大多数(不是全部)单元格的canEdit为"true"。只有可编辑的单元格旁边才会显示圆圈,符合预期。
  • 委托未返回任何“编辑样式”值。(尝试过与否)。
  • 委托在“didSelect”处理程序中不取消选择。
  • 当我尝试在didSelect中将accessoryType设置为Checkmark时(许多帖子都建议这样做,但我在示例中没有看到),它出现在右侧而不是左侧。

其他StackOverflow的问题/答案暗示UITableView存在某种原因导致无法知道将勾选标记放在左侧而不是右侧。我可以相信这一点,但我找不到它。感谢您的任何帮助。

所需效果(来自示例截图):

https://developer.apple.com/library/ios/samplecode/TableMultiSelect/Introduction/Intro.html

The blue  checkbox selection from sample

表格设置

Table Settings from Storyboard

表格单元格设置

Table Cell Settings from Storyboard

4个回答

22
如果在你的cellForRowAtIndexPath中设置了selectionStyle = .None,请将其删除。
我和你一样(使用Xcode 7,iOS9,Swift 2.0),遇到了同样的问题。我在网上找到的大多数文章都是关于右侧勾选标记的,而我的故事板看起来完美无瑕。我的唯一问题是,当我点击行时,我无法让左侧的勾选标记显示出来。
有了你的帖子,我可以比较源代码并找出问题所在 - 谢谢!

好的发现。我在周末确切地找到了这个问题,它是先前版本的一些杂散代码,而删除它(允许选择显示)解决了问题。(对我来说,它在我的单元格子类中)我正在准备发布自己的答案,但很高兴接受你的答案。顺便说一下:我迟迟没有注意到我没有看到任何可见的选择指示(以及没有勾选标记),并意识到这可能是原因。为了回答我自己的(其他)问题,不需要设置复选标记,选择状态就可以完成工作。 - Adam Jack

3

请确保单元格的色调颜色不是白色,否则您将在白色圆圈上获得一个白色复选标记...


0
在我的情况下,解决方法是接受答案和在storyboard/IB中设置UITableViewCell选择。我将选择设置为“无”以防止选择高亮显示。如果您想要编辑复选标记显示,则不能这样做。这只是一个额外的帮助,供那些可能在未来遇到此问题的人参考!

0

我解决了这个问题。将selectionStyle设置为默认值。

我的方法在子类UITableViewCell中实现。

override func awakeFromNib() {
        super.awakeFromNib()

        //Here I solved problem
        let bgView = UIView()
        bgView.frame = self.frame
        bgView.backgroundColor = selectionColor //Here your color

        self.selectedBackgroundView? = bgView
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接