self.delegate=UITableView 中的self,有什么问题吗?
self.delegate=self in UITableView, what is wrong?
我的应用程序需要对 iPhone 和 iPad 通用。对于某些视图,iPhone 版本与 iPad 版本共享相同的视图(例如,表格视图)。所以为了更好的可重用性,我这样写我的表视图,并在 iPhone-controller 和 iPad-controller.
中使用它
.h
@interface NotificationView : UITableView
@end
.m
@interface NotificationView()<UITableViewDelegate,UITableViewDataSource>
@end
@implementation NotificationView
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
self = [super initWithFrame:frame style:style];
if (self) {
self.delegate = self;
self.dataSource = self;
self.rowHeight = 80;
self.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return self;
}
#pragma mark - UITableViewDataSource & UITableViewDelegate
我觉得这样写不太对,但说不出为什么...
我已经搜索了一段时间,但没有得到任何有用的信息。所以,我的问题是:
- 为什么这样写不对?
- 重用
UITableView
的最佳做法是什么?
如果有人能解释一下,在此先感谢。
只要您实现填充 table 所需的所有方法,它就可以正常工作。但它困扰你的原因是因为它设计不佳——它完全模糊了 MVC 设计中的所有界限。您的 tableView 是一个视图。它应该是愚蠢的,并且出于充分的理由,它使用委托来通过简单的适配器插入您拥有的任何模型对象。问问自己,我在 UITableView 的这个子类中是否有任何特定于视图(绘图、外观)的东西?如果不是那么为什么不做一个 tableViewController 或一个小的 NSObject 子类来填充 table?
最好。
我的应用程序需要对 iPhone 和 iPad 通用。对于某些视图,iPhone 版本与 iPad 版本共享相同的视图(例如,表格视图)。所以为了更好的可重用性,我这样写我的表视图,并在 iPhone-controller 和 iPad-controller.
中使用它.h
@interface NotificationView : UITableView
@end
.m
@interface NotificationView()<UITableViewDelegate,UITableViewDataSource>
@end
@implementation NotificationView
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
self = [super initWithFrame:frame style:style];
if (self) {
self.delegate = self;
self.dataSource = self;
self.rowHeight = 80;
self.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return self;
}
#pragma mark - UITableViewDataSource & UITableViewDelegate
我觉得这样写不太对,但说不出为什么... 我已经搜索了一段时间,但没有得到任何有用的信息。所以,我的问题是:
- 为什么这样写不对?
- 重用
UITableView
的最佳做法是什么?
如果有人能解释一下,在此先感谢。
只要您实现填充 table 所需的所有方法,它就可以正常工作。但它困扰你的原因是因为它设计不佳——它完全模糊了 MVC 设计中的所有界限。您的 tableView 是一个视图。它应该是愚蠢的,并且出于充分的理由,它使用委托来通过简单的适配器插入您拥有的任何模型对象。问问自己,我在 UITableView 的这个子类中是否有任何特定于视图(绘图、外观)的东西?如果不是那么为什么不做一个 tableViewController 或一个小的 NSObject 子类来填充 table? 最好。