如何从didSelectRowAtIndexPath调用viewController中的方法

时间:2015-06-03 14:51:32

标签: ios objective-c uitableview uiviewcontroller

我的viewController(MainViewController.m)中有一个方法接受一个参数(让我们说它根据数字改变了viewController的背景颜色):

-(void) methodThatDoesSomething:(int)indexNumber {}

在这个viewController中我有一个UITableView,但是这个表的委托是另一个类(TableDelegateClass.m)。所以在这个课程中我做了选择RowAtIndexPath。

如何调用" methodThatDoesSomething"来自didSelectRowAtIndexPath?如果我这样做:

MainViewController* mainView = [[MainViewController alloc] init];
[mainView methodThatDoesSomething:indexPath.row];

它不起作用。由于该类的另一个实例已创建,并且它不在我当前正在使用的viewController之后。

如果表的委托是MainViewController(只需在didSelectRowAtIndexPath中使用此代码),我就可以轻松完成:

[self methodThatDoesSomething:indexPath.row]

但我想组织更好的代码并拥有不同的类,一个用于表,另一个用于包含该表的viewController。

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案可能是为-(void) methodThatDoesSomething:(int)indexNumber {}定义您自己的委托协议,这样您就可以将TableDelegateClass委托设置为您的viewController,然后调用[delegate methodThatDoesSomething:indexPath.row];(在检查respondsToSelector之后) 。 您还可以在创建TableDelegateClass时传递viewController实例,但这是一个比委托更高的耦合级别。

答案 1 :(得分:0)

解决问题的一种方法是在委托类中创建MainViewController类型的属性,并将控制器实例分配给它。

但也许你遇到的这个问题是指示tableView委托确实应该是MainViewController而不是另一个类?

相关问题