【问题标题】:Change UIButton state in Prototype Cell in Storyboard在情节提要的原型单元中更改 UIButton 状态
【发布时间】:2013-11-12 16:43:51
【问题描述】:

我在情节提要的原型单元中有两个按钮。一个用于 IBAction,另一个用于 IBOutlet。然后将 UITableViewCell 子类化为 MyTableViewCell 并将其指向情节提要中的 Prototype Cell。然后我控制+拖动操作按钮到 MyTableViewCell 以创建 IBAction 并为出口按钮执行相同的操作以创建 IBOutlet。

在方法中:

  -(void)buttonPress:(UIButton *)sender
  {
      MyTableViewCell *cell = (MyTableViewCell *)[[sender superview] superview];
      cell.outletButton.selected = YES;
      ...
  }

我收到错误消息:

原因:'-[UITableViewCellScrollView outletButton]:无法识别的选择器发送到实例

我做错了什么?我尝试做的是在 Prototype Cell 中有两个按钮。当一个按钮被按下时,另一个按钮可以改变状态以显示背景图像,例如选中或突出显示。

提前致谢。

【问题讨论】:

    标签: ios iphone objective-c ipad


    【解决方案1】:

    在 iOS6 和更早版本上,您的代码看起来不错,但在 iOS 7 上,如果您想进入单元格,则必须再执行一步 superview。所以它会是:

    MyTableViewCell *cell = (MyTableViewCell *)[[[sender superview] superview] superview];
    

    【讨论】:

    • 谢谢。更改后,没有错误信息,但状态仍然没有。它始终是正常状态,不会更改为选中状态。
    • 您不应该更改按钮的状态,而是设置例如如果要自定义外观,请使用不同的背景图像。您可以尝试highlighted 属性(也许它会起作用),但我宁愿更改图像
    • 再次感谢。是的,我为 selected 和 highlight 属性设置了不同的背景图像,但是当设置 cell.button.selected = YES 时,状态不会改变。
    • 代替cell.button.selected = YES这一行,更改正常状态下的图像。
    【解决方案2】:

    以这种方式导航视图层次结构通常不是一个好主意,正如您所发现的,操作系统版本之间可能存在差异,这可能会破坏您的代码。

    如果您的 IBAction 和 IBOutlet 都连接到您的 MyTableViewCell 类,您可以简单地使用:

    - (void)buttonPress:(UIButton *)sender
    {
      self.outletButton.selected = YES;
      ...
    }
    

    您还需要在 MyTableViewCell 中实现 prepareForReuse: 以阻止在重复使用单元格时复制按钮的属性。

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 2012-01-24
      • 1970-01-01
      • 2015-12-01
      相关资源
      最近更新 更多