【问题标题】:didSelectRowAtIndexPath UIButton [duplicate]didSelectRowAtIndexPath UIButton [重复]
【发布时间】:2012-08-10 16:13:27
【问题描述】:

可能重复:
Detecting which UIButton was pressed in a UITableView

我有一个 UIButton 添加到 UITableViewCell 我想让这个按钮调用我已经知道调用的“didSelectRowAtIndexPath”

  [self tableView:self.tableView didSelectRowAtIndexPath:indexpath];

但是我无法获取索引路径并尝试了的问题

[self.Tableview indexPathForRowAtPoint:[self.view convertPoint:[sender center] fromView:self.Tableview]]

方法,但它返回相同的 CGPoint ,有帮助吗?

【问题讨论】:

  • indexPathForRowAtPoint:point 返回 indexPath,你从哪里得到 CGPoint?
  • 我从按钮 CGPoint point = [sender center];
  • @Vladimir 谢谢这对我有用
  • 您需要将点转换为 tableView 的坐标系(或从 UIEvent 中获取点,如我在 dup 问题中的回答中的 Edit2 中所述
  • 如何转换成TableView的坐标系?

标签: objective-c ios cocoa-touch uitableview


【解决方案1】:

首先,您不应该自己直接致电didSelectRowAtIndexPath。它是一个委托方法,表视图应该调用它。

相反,创建一个单独的方法来做你想做的事情,然后从didSelectRowAtIndexPath 调用它。

其次,可以这样获取索引路径:

UIButton* button = (UIButton*) sender;
UITableViewCell *cell = (UITableViewCell*)button.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

这是可行的,因为如果一切都以标准方式设置,则按钮的超级视图应该是单元格的 contentView,并且应该是单元格的子视图。

【讨论】:

    【解决方案2】:

    按照我的说法,最好的方法是给 ROW NUMBER AS TAG VALUE FOR tableViewCell' 按钮, 因此,当您单击 button 时,将调用其操作,从中您将获得 sender id sender_id 只不过是 UIButton 实例,获取其标记值..

    例如:你有 UIButton *testButton;
    它的 Selector 是 @selector (testButtonPressed:)

    所以当tableViewCell的Button被按下时,它会调用@selector(testButtonPressed:)

    -(void)testButtonPressed:(id)sender
     {
         NSLog(@"index is %d", sender. tag);
     }
    

    【讨论】:

    • 这不是非常可扩展的,例如它只适用于一个部分。
    • @Paul.s 是的,但您可以设置类似tag = section*1000+row 的方案。
    • @Mundi 我只是一般不喜欢 tag 属性有更好的做事方式 - 例如你的答案
    • 我认为它的可扩展性...因为当您创建单元格时正在设置 coz 标签...这个逻辑可以改进...通过自定义按钮(意味着继承按钮类)并具有变量可以用作标签的 NSObject 类型......所以使用这种方法我们甚至可以发送标签对象作为操作的参数
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多