从 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 中的另一个类调用方法的主要内容,如果未能解决你的问题,请参考以下文章