从 UIButton 中的另一个类调用方法

Posted

技术标签:

【中文标题】从 UIButton 中的另一个类调用方法【英文标题】:Call method from another class in a UIButton 【发布时间】:2015-02-10 03:32:21 【问题描述】:

我有一个自定义的UITableViewCell,其中有一个链接到它的类,称为customCell.m。 (我没有使用 xib。)在单元格中有一个按钮。有没有办法在mainVC.m 文件上创建按钮操作,与customCell.m 相对?

更新

这是我尝试实现的代码。我所做的是,我从mainVC.m调用了一个方法。

CustomCell.m

- (IBAction)myButton:(id)sender

    CategorieViewController *mainVC = [[CategorieViewController alloc] init];
    [mainVC myMethod];

MainVC.m

- (void)myMethod:(id)sender

    UITableViewCell *clickedCell = (UITableViewCell *)[[[sender superview] superview] superview];
    NSIndexPath *clickedButtonPath = [self.myTableView indexPathForCell:clickedCell];

    NSLog(@"%@", clickedButtonPath);

CategorieViewController myMethod]:无法识别的选择器发送到实例 0x7fd2dbd52a00

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[CategorieViewController myMethod]:无法识别的选择器发送到实例 0x7fd2dbd52a00”

【问题讨论】:

你能显示一些代码吗?您可以创建协议或将按钮的目标添加到您正在使用 customcell 的 self 中 您需要致电[mainVC myMethod:nil];。抱歉,我没有看到您的错误 @ChintaN-Maddy-Ramani 实际上,正如我在回答中所写,OP 必须将行更改为 [mainVC myMethod:sender];,因为 sender 参数实际上在 myMethod: 中使用,因此不能为 nil . @LyndseyScott Questioner 写了关于如何调用方法的问题。所以我没有看到错误。 (: . and ya and sender 不能为 nil。 【参考方案1】:

您调用的是myMethod,但方法实际上是myMethod:,并将发送者作为参数。尝试改变:

[mainVC myMethod];

到:

[mainVC myMethod:sender];

此外,您当前作为参数传递给myMethod: 的任何发件人都不会属于mainVC 的表视图,因为您正在创建一个全新的CategorieViewController 实例来执行方法调用及其表从未加载过。

假设MainVC是可见的视图控制器,你可以改变:

CategorieViewController *mainVC = [[CategorieViewController alloc] init];

到:

UINavigationController *nav = (UINavigationController*)self.window.rootViewController;
CategorieViewController *mainVC = (CategorieViewController*)nav.visibleViewController;

用加载的tableview获取当前MainVC实例。

【讨论】:

你说得对。但现在nslog 给了我一个空值。它没有给我点击按钮 superView indexPath? @MikeRally 按钮是表格视图单元格中的吗?如果是这样,它仍然不会包含在 MainVC 的 self.myTableView 中,因此是 nil 值。 是的,按钮在tableViewCell 中。为什么它不起作用? @MikeRally 嗯,我明白了...所以按钮位于 MainVC 的自定义单元格中? 是的。我想要得到的是选定的按钮超级视图 indexPath。

以上是关于从 UIButton 中的另一个类调用方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从 React.js 中的另一个类组件调用方法

从 onPostExecute 中的另一个类调用方法导致 nullPointerException

在 C++ 中从同一类中的另一个方法调用方法

如何从 Python 中的另一个文件调用类方法?

如何从 Flutter(Dart) 中的另一个类调用方法?

如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]