将tableview添加为子视图不会重新加载数据

时间:2013-12-16 17:10:00

标签: ios iphone objective-c uitableview

我在故事板中创建了UITableViewController,并通过

实例化它
self.centerCMController = [self.storyboard instantiateViewControllerWithIdentifier:@"ContextMenu"];
self.centerCMController.delegate = self;
[self.view addSubview:self.centerCMController.view];

稍后在代码中调用

[self.centerCMController.tableView reloadData];
没有任何反应。 TableView不会重新加载数据!我做了一些调查,发现如果我在行之前设置numberOfTtems = 3:

[self.view addSubview:self.centerCMController.view];

表格视图仅显示3个项目。无论我后来改变numberOfTtems = 4,它都只显示前3项(正确)......但是细胞数量将被固定直到时间结束。

我在这里缺少什么?

编辑:

更具描述性,我正确地设置了代表 -

(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView and

-

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

被调用,首先返回1和另一个numberOfItems,在开始时为0,在重新加载时为2 ......但是 -

 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

永远不会被调用

2 个答案:

答案 0 :(得分:1)

我认为你的问题是你需要这些电话:

[[[self centerCMController] tableView] setDelegate:self];
[[[self centerCMController] tableView] setDatasource:self];

当您执行instantiateViewControllerWithIdentifier:时,您创建的是UIViewController,而不是UITableView。因此,设置委托不应该做任何事情,也不应该有数据源。

答案 1 :(得分:0)

不会重新加载数据的最常见原因是表视图没有设置数据源。检查storyboard中的表视图,看它是数据源指向某个东西(通常是包含它的视图控制器)。

第二个最常见的是没有设置您告诉重新加载的表视图的出口。请检查NSLog然后设置(可能再次在故事板中)。

最后,请注意,设计很不寻常。让一个包含表视图的视图控制器更常见/更简单,不实例化另一个视图控制器然后移动它的视图。