【问题标题】:add hidden information to UITableViewCell向 UITableViewCell 添加隐藏信息
【发布时间】:2014-03-05 10:16:01
【问题描述】:

有没有办法在代码中向 UITableViewCell 添加一些隐藏信息?

用例:

  • 在活动提要中,(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 被调用,每个单元格都有一个活动。每个都有自己独特的“activityId”。
  • 每个单元格中都有一些按钮(带有独特的标签),按下时,给定的活动会被“点赞”
  • 每个按钮都有一个 IBOutlet,然后它会调用模型来处理类似的事情

IBOutlet 的代码是:

- (IBAction)buttonUp:(UIButton *)sender {

UIButton *btn = (UIButton *) sender;
UITableViewCell *cell = (UITableViewCell *) [[btn superview] superview];

UIView *cellView = [cell.contentView viewWithTag: ..myUniqueButtonTag.. ];

NSLog(@"activityId is: %@", ...);
}

【问题讨论】:

  • 使用 cell.accessibilityValue 并为其分配数据.. 当点击找到该单元格及其accessibilityValue

标签: ios objective-c cocoa-touch uitableview


【解决方案1】:

如果您想在单元格中执行比标准单元格允许的更复杂的事情,您需要创建一个自定义 UITableViewCell 类 - https://developer.apple.com/library/ios/documentation/userexperience/conceptual/tableview_iphone/TableViewCells/TableViewCells.html

【讨论】:

  • 我真正需要的是activityId...我真的需要一个全新的子类吗?
  • 如果您的 id 是 NSNumber,也许您可​​以使用 tag 属性。但是,如果您真正需要做的只是添加一个属性,那么子类化 UITableViewCell 会很容易。如果你想扩展它的功能,将来有一个子类可能会很有用。
  • 我可能想要(嗯,实际上需要)。所以,这似乎是最好的做法。在您的脑海中,知道设置时我应该避免的任何大陷阱吗?编辑:将在时间限制后接受这个答案是正确的
  • 我发现自动布局可能有点棘手 - 查看这个答案和 github 项目以获取具有可变高度的自定义单元格的示例。我发现它很有帮助。 - stackoverflow.com/a/18746930/3096507
【解决方案2】:

你不应该这样做 superview shuffle: [[btn superview] superview] 因为它迟早会坏掉。

我同意@ansible 的观点,即您应该创建一个自定义单元格并使用委托关系,以便按钮告诉单元格它被点击,而单元格告诉委托人。这是最好和最合适的解决方案。

不过,对于作弊者,请考虑在按钮上使用objc_setAssociatedObject 将 id 信息与其关联,以便您可以在操作方法中访问它。

【讨论】:

  • 我已经制作了一个自定义单元格,但是当按下按钮时,我依靠[[[btn superview] superview] superview] 来获取自定义单元格的类。关于你的第一句话,有没有更好的方法?
  • 使单元格成为按钮方法的目标并让它转发操作。
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
相关资源
最近更新 更多