使用 UITableView 子类化 UIViewController

Posted

技术标签:

【中文标题】使用 UITableView 子类化 UIViewController【英文标题】:Subclassing a UIViewController with a UITableView 【发布时间】:2011-11-14 13:25:01 【问题描述】:

我正在尝试继承具有嵌入式 UITableView 并且是 UiTableViewDataSource 和 UITableViewDelegate 的 UIViewController。

大师班长这样:

@interface PFUIViewControllerWithTable : PFUIViewController     <UITableViewDelegate,UITableViewDataSource, RKObjectLoaderDelegate> 
UITableView *_tableView;
NSArray *_data;

@property (nonatomic,retain) UITableView *tableView;
@property (nonatomic,retain) NSArray *data;
- (void)configureCell:(PFRewardsUITableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath;

并且实现包含从 self.data 属性填充表格视图的方法。

在子类中,填充数据并调用[self.tableView refresh]

@interface MySubclass : PFUIViewControllerWithTable <UITableViewDataSource,     UITableViewDelegate> 


- (void)loadObjectsFromDataStore;
- (void)loadLiveData;
- (void)configureCell:(PFRewardsUITableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath;

在此配置中从不调用 UItableViewDataSource 方法。委托和数据源设置为主类。主类从 self.data 属性填充 tableview,该属性由子类修改。

那么,对这样的视图进行子类化的方法是什么?

【问题讨论】:

为什么 UITableViewController 不够用? 为什么将协议 UITableViewDataSource 和 UITableViewDelegate 添加到 MySubClass 的定义中 - PFUIViewControllerWithTable 已经承诺了这些实现。 您确定设置了委托/数据源吗?您是否在 viewDidLoad 中设置它们?在那种情况下,您是从子类中调用 [super viewDidLoad] 吗? 我不知道是不是重新复制错误,但它是 [self.tableView reloadData] 而不是 [self.tableView refresh]。 Denis:在这种情况下,我有几个视图需要与表格视图的风格相似。有很多自定义设置和数据处理,我不想复制粘贴到每一个。直到:我在玩弄没有定义之后添加了定义(假设它们是继承的)。我将再次删除它们,因为它们不应该被需要(但没有它们也无法工作) jbat100:也许我没有做对。我将它们设置在 initWithNibName.... 可能是那里的问题! 【参考方案1】:

确保您正确设置了委托和数据源。

这是一个错误:

PFUIViewControllerWithTable *controller = [[MySubclass alloc] init];
[controller.tableView setDelegate:controller];
[controller.tableView setDataSource:controller];

这应该没问题:

PFUIViewControllerWithTable *controller = [[MySubclass alloc] init];
[controller.tableView setDelegate:(MySubclass*)controller];
[controller.tableView setDataSource:(MySubclass*)controller];

我相信你的问题出在哪里。

【讨论】:

添加演员表不会改变代码的效果;您的两个示例在功能上都是相同的。【参考方案2】:

使用 IBOulet 进行表格视图

现在在您的视图控制器的 xib 中检查表视图已绑定,并且它的委托和数据源已提供给文件所有者。

现在检查您提供给 tableview 的数组是否包含内容

【讨论】:

以上是关于使用 UITableView 子类化 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

子类化 UIView 或使用 UIView 组合

使用 UITableView 子类化 UIViewController

如何子类化 UITableView?

iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类

如何在 UITableVIew 下添加 UIButton?

子类化和覆盖使用 nib 文件创建的 UIView