在UITableView中self.delegate = self,出了什么问题?

时间:2016-05-04 10:42:30

标签: ios objective-c uitableview code-reuse

我的应用程序必须适用于iPhone和iPad。对于某些视图,iPhone版本与iPad版本共享相同的视图(例如,tableview)。因此,为了更好的可重用性,我编写了这样的tableview,并在iPhone控制器和iPad控制器中使用它。

·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的最佳做法是什么?

如果有人能解释,请提前致谢。

1 个答案:

答案 0 :(得分:2)

只要您实现填充表所需的所有方法,它就会正常工作。但它之所以会让你烦恼,是因为它的设计很糟糕 - 它完全模糊了MVC设计中的所有线条。您的tableView是一个视图。它应该是愚蠢的,并且它使用委托来插入你使用简单适配器的任何模型对象,这是有充分理由的。问问自己,我在UITableView的这个子类中是否有任何特定于视图(绘图,外观)的东西?如果没有那么为什么不做一个tableViewController或一个小的NSObject子类来填充表? 最好。