【发布时间】:2015-12-21 13:14:53
【问题描述】:
我有一个UITableViewController 和自定义UITableViewCell,当我点击单元格上的某个按钮时,控制器应该推送到另一个控制器并呈现另一个视图。
我可以为代码架构师想出两种解决方案。
第一个是我创建了一个协议方法来响应单元格中的点击事件并将控制器设置为委托,因此一旦点击我的单元格,控制器就会做出反应以推送到另一个视图。
-
但是我也可以在我的单元类中做一些这样的事情,而不是创建委托,我不断询问 nextResponder 它是否是带有
for循环的正确控制器,一旦我得到它,我就用它来推送到下一个:@implementation MyCustomTableViewCell //... //... //... -(void)tappedOnSomeView { id obj = nil; for (obj = self; obj; obj = [obj nextResponder]) { if ([obj isKindOfClass:[MyTableViewController class]]) { UIViewController *uiVC = (UIViewController *)obj; MyNextViewController *nextVC = [[MyNextViewController alloc] init]; [uiVC.navigationController pushViewController:nextVC animated:YES]; return; } } } //... //... //... @end
所以这不是非常 MVC 吗?或者它是丑陋的代码?我应该只创建委托来处理其 tableview 控制器中我的单元格上的所有手势事件吗?或者还有其他更好的方法吗?
谢谢。
【问题讨论】:
-
选项 1 是更好的方法
-
总是!!!总是!使用您提到的第一种方法!
-
只是为了给你提供另一种选择,你可以这样做在 cellForRowAtIndexPath 中,将目标添加到视图中以处理点击事件...这样你可以直接捕捉到点击的响应在视图控制器内部
-
选项 2 不好、脆弱且难以重复使用。
标签: ios objective-c uitableview model-view-controller