实现自定义的UITableViewController类,并避免委托警告
我试图使自己的UITableViewController
版本的UIViewController
(更多定制)。所以在我的超类中,我实现了委托和数据源,并将UITableView
对象委托和数据源属性设置为“this”。唯一的问题是我得到一个编译器警告,抱怨我没有实现强制的dataSource和委托方法。我希望能够实现这些方法时,我的自定义UITableViewController
。实现自定义的UITableViewController类,并避免委托警告
有一个整洁的方式,使这些警告消失,或者是我把强制性的委托方法都是空的,然后在子类中重写他们的唯一途径?这是不好的做法吗?任何人都有关于苹果如何完成这个UITableViewController
类的任何见解?
我使用这种模式为“抽象”的方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
[self doesNotRecognizeSelector:_cmd];
abort();
}
_cmd
的变量是当前方法的选择器。它会自动提供,就像self
一样。
您必须致电abort()
,因为编译器知道abort()
未返回,但它不知道有关doesNotRecognizeSelector:
。
至少在iOS 5中,UITableViewController
方法不是空的,因为UITableViewController
支持从故事板加载预定义(静态)行。
谢谢。只是好奇,但实现你的抽象模式,这与什么目的,而只是把方法留空?如果它是用户可以调用的方法,我会理解它,但委托方法只能由系统/委托调用。或者也许我错过了一些东西,如果你能解释,会很感激。 – 2012-02-02 21:50:40
好吧,我想我明白了为什么你这么做了,以防止它为退货价值发出警告。如果该方法没有返回值,那么你会留下空白还是做了其他的事情呢? – 2012-02-02 22:45:53
重写'doesNotRecognizeSelector:'有可能(尽管很少)返回,所以我总是使用'abort()'。 – 2012-02-02 23:02:21
你能告诉更多的是什么,你的意思是“更多的定制”做一点?也许有办法做你想做什么比制作你自己版本的“UITableViewController” – 2012-02-02 21:36:08
好吧,一件大事就是我希望它从设置所有我的应用程序视图控制器的UIViewController类中获益。 – 2012-02-02 21:40:10
您可以设置在一个没有问题的一个UIViewController一个UITableView,你并不需要一个UITableViewController – 2012-02-02 21:43:24