【问题标题】:UIView updates when it is a tableHeaderView, but not when it is a subviewUIView在tableHeaderView时更新,但在子视图时不更新
【发布时间】:2012-05-15 17:53:28
【问题描述】:

我有一个包含 TableView 的自定义 UIView。在表格上方,我计划展示一些其他项目。现在,我只想要一个按钮。

我正在创建一个 UIView 'headerView',并将按钮添加到它。按钮本身只是被操纵以在按下时更新其标题。

如果我将 headerView 添加到表视图作为 tableHeaderView,它就可以正常工作。

如果我在tableview 上方添加headerView,作为同级子视图,它会正确显示,但按钮标题不会更新。

我已经通过日志验证了更新按钮标签的方法被调用了,但是视图似乎需要刷新。

为什么会这样?我错过了一些简单的东西吗?

如果有帮助,请遵循代码。

注意:我没有使用 IB 来做这些。

更新:我已将其缩小到一行。当我设置 tableview 的框架时,我将它添加到 headerView 下方,我将 origin.y 设置为 headerView.size.height。如果我将其更改为使用硬编码数字(即使值相同),按钮也会更新。

【问题讨论】:

    标签: ios cocoa-touch uiview addsubview


    【解决方案1】:

    没有任何代码很难诊断问题,但这里有一些常见问题/解决方案可能会有所帮助。

    1. 使用 [button setTile:forState:] 而不是 button.titleLabel.text
    2. 通过在适当的视图上调用 setNeedsLayout 和/或 layoutIfNeeded,确保您没有错过任何对 layoutSubviews 的调用。
    3. 确保使用正确的控制事件将正确的选择器名称连接到正确的目标。

    听起来因为它在某些情况下有效,所以 1 和 3 不是问题。此外,由于它在您设置不同的大小时起作用,它可能是 2。tableview 将正确调用布局方法到它的标题视图,这可能是它作为表标题视图而不是正常兄弟视图的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多