如果UITableViewController添加到其他UIView,委托如何工作?

时间:2013-01-08 01:03:03

标签: ios uiview uitableview

我想在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!

1 个答案:

答案 0 :(得分:2)

你的问题本身就有答案。在第一个代码中,您没有在第二个代码中设置deletage,而是将委托设置为tableViewController.tableView.delegate = tableViewController;,这将调用tableViewController中实现的委托方法。

如果您计划在placeholderView类中实现委托方法,则需要将委托设置为`tableViewController.tableView.delegate = self;,然后在placeholderView类中实现所有委托。那会有效。

如果您只需要UITableView,您还可以考虑为UITableView类创建子类,并将其添加为placeholderView的子视图。