iPhone:如何从viewcontroller获取customcell的按钮动作?

时间:2011-08-22 11:27:54

标签: iphone ios

我使用UITableview,使用IB我在自定义单元格中定义了一个UIButton和一些标签,自定义单元子类已经定义了按钮的IBAction和必要的IBOutlets,但我想处理按钮单击事件tableview控制器它自己但不在自定义单元子类中。

我该怎么做?我还需要确切地点击哪一行的按钮,这样我就会显示与之相关的内容。

3 个答案:

答案 0 :(得分:2)

我通过将其添加到我的控制器来解决问题;

[cell.expButton setTag:indexPath.row];
UIButton *button = (UIButton *)[cell expButton];
[button addTarget:self action:@selector(buttonTapped:event:) forControlEvents:UIControlEventTouchUpInside];

答案 1 :(得分:0)

对于可点击事件的需要(对子视图的触摸效果),我通常会这样做:

-(void)viewDidLoad{
    self.tableView.delaysContentTouches = NO;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 // This will do the touch down effect on the subView of your UIButton
  for (id obj in cell.subviews)
    {
        if ([NSStringFromClass([obj class]) isEqualToString:@"UITableViewCellScrollView"])
        {
            UIScrollView *scroll = (UIScrollView *) obj;
            scroll.delaysContentTouches = NO;
            break;
        }
    }

   // I need to get which row's button is exactly clicked so I will show the content relavant to it.- here it is 
   UIButton *btn = (UIButton*)[cell viewWithTag:200];
   // btn = cell.myButton; If you are connected with the IBOutlet
   [btn setTag:200 + indexPath.row];
   [self.btnPlay addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];

}

-(void)btnAction: (id)sender{
    UIButton *btn = (UIButton *)sender;
       NSLog(@"Selected subView of the  Row is  %d th tag", btn.tag-200);

   // You can get the UITableViewCell using the tag property
    selectedIP = [NSIndexPath indexPathForRow:btn.tag - 200 inSection:1;
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:selectedIP];

  // Do the relevant code 
}

答案 2 :(得分:0)

你想怎样做的方式是正确的(MVC必须如何编码清洁) - 那很漂亮!

为了让它更有效率,你必须使用委托 - 这是如何做到这一点的最好方法! 这是一种如何做到这一点的方法(例如在swift中)。 https://stackoverflow.com/a/29920564/1415713