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

Ios 单击单元格中的按钮添加新的单元格行,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我用自定义类将UITableViewCell子类化。并增加了一些渠道。现在我想在我的单元格中获得iActionon按钮。如何在ViewContoller内部定义iAction 例如,您可以创建所需的任何点击处理程序 #define handle_tap(view, delegate, selector) do {\ view.userInteractionEnabled = YES;\ [view addGestureRecognizer: [[UITapGestureRecognizer al

我用自定义类将
UITableViewCell
子类化。并增加了一些渠道。现在我想在我的单元格中获得
iAction
on按钮。如何在
ViewContoller
内部定义iAction

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

#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;
//...
}

例如,可以创建所需的任何tap处理程序

#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;
//...
}

不能在视图控制器类中创建单元格的出口,因为动态创建了单元格的不同实例,这确实需要每个单元格的不同出口连接。 您可以做的是创建一个自定义单元格类的委托,并在方法CellForRowatinex中将其设置为视图控制器实例。 然后,当按钮的操作被触发时,您可以调用委托方法并将控件转移到视图控制器实例

注意:请分享您的场景以获得进一步帮助
感谢您不能在视图控制器类中创建单元格的出口,因为单元格的不同实例是动态创建的,这确实需要每个单元格的不同出口连接。 您可以做的是创建一个自定义单元格类的委托,并在方法CellForRowatinex中将其设置为视图控制器实例。 然后,当按钮的操作被触发时,您可以调用委托方法并将控件转移到视图控制器实例

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

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


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

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


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

另一种方法是您可以在UITAbleviewCell类中声明一个块,如:

 var block_CheckBox: (() -> ())!
假设按钮具有如下操作:

 @IBAction func didActButton_CheckBoxClicked(_ sender: AnyObject)
    {
        if block_CheckBox != nil{
            block_CheckBox()
        }
    }
按下按钮时,我们称之为块

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

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

该块仅在您按下按钮时调用。

另一种方法是您可以在UITAbleviewCell类中声明块,如:

 var block_CheckBox: (() -> ())!
假设按钮具有如下操作:

 @IBAction func didActButton_CheckBoxClicked(_ sender: AnyObject)
    {
        if block_CheckBox != nil{
            block_CheckBox()
        }
    }
按下按钮时,我们称之为块

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

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

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

如果普通C函数可以实现相同的功能,请不要使用宏。添加宏将不必要地使事情复杂化。此外,这种方法将打破MVC模式。请更详细地描述您的意思。此实现工作正常,易于使用,无内存泄漏。我没有发现这种解决方案有任何缺点。此外,这确实有助于以编程方式添加任何点击。@Saranjith,如果有帮助,请批准。如果普通C函数可以实现同样的效果,请不要使用宏。添加宏将不必要地使事情复杂化。此外,这种方法将打破MVC模式。请更详细地描述您的意思。此实现工作正常,易于使用,无内存泄漏。我没有发现这种解决方案有任何缺点。此外,这确实有助于以编程方式添加任何点击。@Saranjith,如果有帮助,请批准。使用此方法,按钮不再是单元格的一部分,而是成为视图控制器的一部分。使用此方法,按钮不再是单元格的一部分,而是视图控制器的一部分。请给我目标Cversion@Saranjith请阅读本教程以使用Objective-c中的块。你能给我目标C吗version@Saranjith请阅读本教程以使用Objective-c中的块。