我想在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];
现在该表出现在占位符视图中,但它是空的。在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];
你知道为什么代表团这样工作吗?
THX!
答案 0 :(得分:2)
你的问题本身就有答案。在第一个代码中,您没有在第二个代码中设置deletage,而是将委托设置为tableViewController.tableView.delegate = tableViewController;
,这将调用tableViewController
中实现的委托方法。
如果您计划在placeholderView
类中实现委托方法,则需要将委托设置为`tableViewController.tableView.delegate = self;
,然后在placeholderView
类中实现所有委托。那会有效。
如果您只需要UITableView
,您还可以考虑为UITableView
类创建子类,并将其添加为placeholderView
的子视图。