如果 UITableViewController 添加到其他 UIView,委托如何工作?
Posted
技术标签:
【中文标题】如果 UITableViewController 添加到其他 UIView,委托如何工作?【英文标题】:How delegation work if UITableViewController added to other UIView? 【发布时间】:2013-01-08 01:03:02 【问题描述】:我想在 UIView 中显示一个 UITableViewController,我有一个解决方法,但我想了解它为什么会这样工作。
场景是这样的: - 创建了一个新的单一视图应用程序 - 在 IB 中向主视图添加了一个视图 - 为视图创建了一个出口:
@property (weak, nonatomic) IBOutlet UIView *placeholderView;
- 在项目中添加了一个带有 XIB 的新 UITableViewController - 将 numberOfSectionsInTableView 更改为返回 1,将 numberOfRowsInSection 更改为返回 10,并将 cellForRowAtIndexPath:
cell.textLabel.text = @"hello";
- 在 ViewController 文件中的 ViewDidLoad 方法:
ORGTableViewController *tableView = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil];
[self.placeholderView addSubview:tableView.tableView];
现在表格出现在 placeholderView 但它是空的。在 TableViewController 文件中调用 InitWithStyle 和 ViewDidLoad 方法。但是没有调用 numberOfSectionsInTableView、numberOfRowsInSection 和 cellForRowAtIndexPath。
还尝试在 AppDelegate 中将此代码添加到 didFinishLaunchingWithOptions 方法,并且它 -按预期工作,出现带有文本的单元格:
ORGTableViewController *tableViewController = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil];
self.window.rootViewController = tableViewController;
所以它起作用了,当我将 UITableViewController 添加到 UIView 时,它看起来好像委派搞砸了,解决方法很简单...... ViewController,viewDidLoad 方法:
ORGTableViewController *tableViewController = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil];
tableViewController.tableView.delegate = tableViewController;
[self.placeholderView addSubview:tableViewController.tableView];
您知道为什么委派以这种方式工作吗?
谢谢!
【问题讨论】:
【参考方案1】:你的问题本身就有答案。在第一个代码中,您没有像在第二个代码中那样设置删除,而是将委托设置为 tableViewController.tableView.delegate = tableViewController;
,这将调用在 tableViewController
中实现的委托方法。
如果您打算在placeholderView
类中实现委托方法,则需要将委托设置为`tableViewController.tableView.delegate = self;
,然后在placeholderView
类中实现所有委托。那会奏效的。
如果只需要UITableView
,也可以考虑将UITableView
类子类化,添加为placeholderView
的子视图。
【讨论】:
以上是关于如果 UITableViewController 添加到其他 UIView,委托如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewController 的最后一行被截断