【问题标题】:self.delegate=self in UITableView, what is wrong?UITableView 中的 self.delegate=self,有什么问题?
【发布时间】:2016-05-04 10:42:29
【问题描述】:

我的应用需要对 iPhone 和 iPad 通用。对于某些视图,iPhone 版本与 iPad 版本共享相同的视图(例如,tableview)。所以为了更好的重用性,我这样写我的tableview,并在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 的最佳做法是什么?

如果有人能解释一下,请提前感谢。

【问题讨论】:

  • 你在哪里获取了tableview的对象?
  • 如果您只是因为 iphone 和 ipad 支持而这样做? aur 你需要相同的表格视图用于多种用途吗?如果您只根据尺寸(如平板电脑或手机)执行此操作,则无需执行此操作
  • @AayushKatiyar 在视图控制器中。
  • @trojanfoe 也许你是对的。我只是在尝试。 :)

标签: ios objective-c uitableview code-reuse


【解决方案1】:

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

【讨论】:

  • 回答你的问题,那不是。所以,也许我应该只使用 tableviewcontroller 并将其作为孩子添加到控制器中。我最初的目标是更轻的控制器,但是,很明显我走错了方向。:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多