在单击单元格中的单击按钮上添加新单元格行

时间:2017-01-10 03:57:29

标签: ios objective-c uitableview

我已将UITableViewCell子类化为自定义类。并添加了一些插座。现在我想在我的单元格中获得IBAction按钮。我如何在ViewContoller内部定义IBAction。

5 个答案:

答案 0 :(得分:2)

// In cellForRowAtIndexpath

cell.yourButton.tag=indexPath.row;
button.addTarget(self, action: "buttonHandler:", forControlEvents: UIControlEvents.TouchUpInside)


func buttonHandler(sender:UIButton!)
{
    if(sender.tag==0){
         println("Button at row 0")
    }
    else if(sender.tag==1){
       println("Button at row 1")
    }
}

答案 1 :(得分:2)

如果在视图控制器中添加处理程序,那么它将破坏MVC模式。应在视图本身内处理视图上的事件。但是,您可以为视图创建委托,并从按钮操作处理程序本身调用您想要的方法。

此外,因为在您的XIB中,您将指定outlet类作为UITableViewCell子类。因此,只有这个子类才能处理你的事件。

答案 2 :(得分:1)

您无法在视图控制器类中创建单元格的出口,因为单元格的不同实例是动态创建的,实际上每个实例需要不同的出口连接。 您可以做的是创建自定义单元类的委托,并在方法cellForRowAtIndex中将单元格出列,将其设置为视图控制器实例。 然后,当触发按钮的操作时,您可以调用委托方法并将控件传输到视图控制器实例。

注意:请分享您的方案以获得进一步的帮助 谢谢

答案 3 :(得分:1)

其他方法是你可以在UITAbleviewCell类中声明一个块,如:

 var block_CheckBox: (() -> ())!

假设按钮具有IBOutlet Action,例如:

 @IBAction func didActButton_CheckBoxClicked(_ sender: AnyObject)
    {
        if block_CheckBox != nil{
            block_CheckBox()
        }
    }

按下按钮时我们调用了块。

Controller类中,您可以将块定义为:

 cell.block_CheckBox = {
            ()in
            //Do required action
        }

只有在按下按钮时,该块才会调用。

答案 4 :(得分:0)

例如,您可以创建所需的任何点击处理程序。

#define handle_tap(view, delegate, selector) do {\
view.userInteractionEnabled = YES;\
[view addGestureRecognizer: [[UITapGestureRecognizer alloc] initWithTarget:delegate action:selector]];\
} while(0)

稍后在您的代码中:

SEL sel = @selector(actionOfMine:);
    handle_tap(btnbck, self, sel);

处理它:

-(void) actionOfMine:(UITapGestureRecognizer *)recognizer {
    UIView * button = (UIView *) recognizer.view;
    int i = (int)button.tag;
//...
}