【问题标题】:Hiding objects within UITableViewCell iOS 8 (Swift)在 UITableViewCell iOS 8 (Swift) 中隐藏对象
【发布时间】:2014-07-09 20:32:24
【问题描述】:

我有一个UITableViewCell,它在触摸时会展开(下拉)。然后向用户呈现选项的选择。当用户触摸其中一个选项时,我想暂时隐藏所有选项,显示活动指示器旋转,显示确认消息(成功时),然后将单元格折叠回正常状态。

我无法在自定义单元格中隐藏任何对象。以下简单代码不起作用(这是与单元格对应的正确超级视图):

var customCell: MyCustomCell = icon.superview.superview.superview as MyCustomCell
customCell.myLabel.hidden = false

我尝试隐藏/显示各种不同的对象,但没有任何效果。我什至在dispatch_async 中弹出它以确保它在主线程上运行。

此外,Xcode 6 beta 告诉我myLabel.hidden 是只读的。这也发生在其他对象上。这不再是隐藏某些东西的正确方法了吗?

我已经四处搜索,但没有找到答案。如果有人可以帮助我,我将不胜感激!谢谢。

【问题讨论】:

  • 什么都没有出现在我身上,所以相反:这就是我要做的:将 customCell.myLabel 分配给一个变量以确保它是您认为的类型:var label: UILabel = customCell.myLabel。然后打印hidden的当前值:println(label.hidden)。接下来检查 customCell 是否仍在屏幕上(也许 tableview 已重新加载?)通过设置背景颜色(或任何适用于您的情况):customCell.backgroundColor = UIColor.redColor()
  • 有趣.. 我照你说的做了。隐藏标签,它打印出true(正确),显示标签,它打印出false(正确)。更新了backgroundColor,它只是在单元格再次崩溃后才在视觉上更新(不是马上——我在调用backgroundColor后放了一个sleep(2)
  • 也许尝试使用customCell.setNeedsDisplay() 强制重绘?
  • 运气不好。所有这些代码都在方法iconPress(icon: UIButton!) 中,在单元初始化期间通过addTarget 附加到适当的图标。似乎只有在iconPress() 返回后才能看到对单元格的任何更新。也许我的设置不是正确的方法?
  • 哦...好吧,如果您阻塞了 UI 线程(主线程),您将不会看到任何 UI 更新;)

标签: ios swift show-hide


【解决方案1】:

执行此类操作的通常方法是实现 UITableViewDelegate 方法 -tableView:didSelectRowAtIndexPath: 以让您知道何时点击了一行。

然后就可以轻松获取和修改单元格了

var customCell = self.tableView.cellForRowAtIndexPath(indexPath) as MyCustomCell
customCell.myLabel.hidden = false

我认为icon.superview.superview.superviewcode smell。如果您更改单元格中的视图层次结构,多个超级视图调用会使您的代码变得脆弱并且可能会中断。

【讨论】:

  • 哈……当然,我的调试建议应该从这个开始;)
  • 我这样做的唯一原因是将其与委托方法didSelect... 中的展开/折叠代码分开。我确实认为它可能是那条线,但是我尝试使用CGPoint 来抓取单元格。那也没有用。我可能会尝试把它全部放回didSelect...
猜你喜欢
  • 2015-02-08
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多