使用 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 UITableView 子类化 UIViewController