【问题标题】:Add UITableViewController's view to another UIViewController, the "delegate" and "date source" are not called将 UITableViewController 视图添加到另一个 ViewController 中,“委托”和“数据源”不被调用
【发布时间】:2014-10-20 08:57:06
【问题描述】:

我在 IB 中创建了一个 UITableViewController,名为 MyTableViewController。 xcode 生成 MyTableViewController.m、MyTableViewController.h 和 MyTableViewController.xib,其中包含一个 tableview。

然后我通过以下代码将生成的表格视图添加到另一个视图控制器中,

MyTableViewController *myTableViewController = [[MyTableViewController alloc] init];
UITableView *myTableView = (UITableView *)myTableViewController.view;
myTableView.frame = CGRectMake(190, 190, 500, 160);
myTableView.delegate = myTableViewController;
myTableView.dataSource = myTableViewController;

因此,MyTableViewController.m 中的委托方法不会被调用, 例如“numberOfSectionsInTableView”、“numberOfRowsInSection”、“cellForRowAtIndexPath”。

有什么建议吗?谢谢。

【问题讨论】:

  • 你有没有在.h文件中写过

标签: ios tableview


【解决方案1】:

你没有加载 XIB 文件,所以我怀疑 myTableView 是 nil。而不是这个:

MyTableViewController *myTableViewController = [[MyTableViewController alloc] init];

试试这个:

MyTableViewController *myTableViewController = [[MyTableViewController alloc] initWithNibName:@"MyTableViewController" bundle:nil];

另外,您需要告诉您的视图控制器它有一个 childViewController,并告诉您的 tableViewController 它有一个父 VC。在您的 addSubview 周围加上以下几行:

[self addChildViewController:myTableViewController];
[self.view addSubView:myTableView];
[myTableViewController didMoveToParentViewController:self];

【讨论】:

  • 太酷的答案!如果我不添加您提到的最后三个单词,它仍然不起作用。这就是为什么?此外我这样做是为了最大限度地重复使用表格视图部分。有什么相关的吗?
  • 我不太明白您关于最大程度地重用 tableView 的问题。但是当你尝试将一个视图控制器的视图作为另一个视图控制器的子视图时,你应该使用上面的顺序:addChildViewController, addSubview, didMoveToParentViewController
猜你喜欢
  • 2016-03-03
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2017-03-13
相关资源
最近更新 更多