我已将UITableViewCell
子类化为自定义类。并添加了一些插座。现在我想在我的单元格中获得IBAction
按钮。我如何在ViewContoller
内部定义IBAction。
答案 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;
//...
}