ios - 一个 IBAction 用于多个带按钮的自定义原型(prototype)单元

标签 ios uitableview uistoryboard

使用 Storyboard,我有一个包含多个动态原型(prototype)单元的 TableView Controller 。其中一个单元是一个自定义动态原型(prototype)单元(我为其创建了一个子类),其中包含标签和开关。我将开关的操作连接到 View Controller 中的操作方法(例如 switchChanged:)。在 cellForRowAtIndexPath 中,我配置并返回适合指定索引的单元格。到目前为止一切顺利。

问题:我的应用程序有这些自定义单元的多个实例,那么如何区分哪个开关已更改?一个想法是,在 View Controller 中,我可以为每个单元格创建一个成员开关,并在第一次调用 cellForRowAtIndexPath 时将它们链接到特定的单元格开关。然后我可以使用这些成员开关与传递到 switchChanged: 的开关进行比较。

我知道我可以尝试一下并立即得到答案,但我希望能够讨论其他开发人员如何做我想做的事情。这是最好/最差/还可以的方法吗?实用的替代方案是什么?

问候,

--约翰

最佳答案

我曾经遇到过这种情况(不是使用开关,但我相信它同样适用)。我已经通过对对象类进行子类化并在子类中添加所需的属性/方法来设法解决这个问题。

调用操作时,您的发送者将是子类,您可以在那里访问添加的代码。

我不知道情况是否如此,但如果您只是尝试更改一个值,则应该在创建对象时使用将开关值绑定(bind)到属性。它甚至不需要 IBAction 来调用。

编辑:示例:

@interface MySwitch : UISwitch
@property (nonatomic, assign) NSUInteger someProperty;
@end

然后,每次创建单元格时,您都可以将“someProperty”设置为您想要的任何内容。

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
  // yada yada yada...
  UITableViewCell *cell;
  // yada yada yada...

  [cell.myLinkedSwitch  setSomeProperty:indexPath.row];
  return(cell);
}

除非您不使用 tableView:cellForRowAtIndexPath: 方法创建单元格。那么您可能应该使用绑定(bind)将您的值放到正确的位置。

关于ios - 一个 IBAction 用于多个带按钮的自定义原型(prototype)单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015349/

相关文章:

ios - Swift 上的 SoundCloud SDK,无法翻译

Swift 4 在 UITableViewCell 中禁用 UIButton 的正确方法

ios - ScrollView 内的表格 View : expand table view on scrolling and hide view above it

ios - 在 View 之间传递值给出 (null)

ios - UIScrollView 中的动态高度 UILabel

ios - 循环遍历 AnyObject 数组

ios - 我可以在 Storyboard中看到我的自定义字体,但字体在 iOS 模拟器中没有变化?

iphone - 当选择行时如何将单元格的标题保存到 NSMutableArray 中?

ios - 如何使 TableCell UIImageView 具有相同的宽度但高度取决于图像?

ios - collectionView 的默认值 :layout:referenceSizeForFooterInSection