解决方案是从UITableView正确启动,然后将UITableView委托添加到UIViewController,如所选答案中所述.
前言:我几乎阅读了有关此事的所有文章,没有任何建议有帮助.
我正在将UITableViewController的UITableView嵌入到UIViewController中.
我知道除非渲染视图,否则不会调用任何东西,因此我渲染它并且我可以使用NSLog来显示它击中了那些方法.
我尝试在InterfaceBuilder中创建一个UITableViewController并将我的子类设置为自定义类,这样就可以了!但这不是我需要去做的事情.这是我收集/完成的内容:
>我使用InterfaceBuilder来管理UIViewController但我正在以编程方式添加UITableView
> delegate和dataSource都设置正确,self.tableView不是nil
>尽管有效的日志记录,但从不调用cellForRowAtIndexPath,并且渲染的UITableView为空
>我将代表添加到我的控制器,它没有改变任何东西
我在UITableViewController上设置了以下内容:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { NSLog(@"%@", self.questions); // This outputs the questions array as not empty and works // As you can see I am also returning 1. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@"%d", [self.questions count]); // This outputs 4 as it should return [self.questions count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // All we need to focus on is this NSLog which never outputs NSLog(@"Was called and array is, %@" self.questions); static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; return cell; }
我尝试过多种方式设置视图:直接添加UITableViewController,添加UITableViewController的UITableView(这似乎是正确的方法),但没有任何工作.
也许在使用InterfaceBuilder或我忘记的一些随机事物时,我已经忘记了一个重要的步骤.任何帮助,将不胜感激.谢谢!
**更新**
这是我添加UiTableViewController或UITavleView的方法
GTTableViewController *tvc = [[GTTableViewController alloc] initWithStyle:UITableViewStylePlain]; // Either [self.view addSubview:tvc.view]; // OR [self.view addSubview:tvc.tableView]; // Just to make sure everything is still ok.. and I see the 2/3 TV methods fire. [self.tableView reloadData];我将向您展示如何以编程方式将表视图添加到不是UITableViewController的视图控制器的简单示例,而不是尝试分析您的代码.希望这可以帮助您自己解决问题.
在.h文件中:
@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { } @end
在.m文件中:
- (void) loadView { CGRect mainViewFrame = CGRectMake(...); self.view = [[[UIView alloc] initWithFrame:mainViewFrame] autorelease]; // You could make this even simpler if you set the table view as // your main view CGRect tableViewFrame = self.view.bounds; UITableView* tableView = [[[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain] autorelease]; [self.view addSubview:tableView]; tableView.delegate = self; tableView.dataSource = self; }
这就是它.没什么了不起的,但是通过这个简单的设置,UITableViewDataSource数据源方法应该很乐意触发,包括tableView:cellForRowAtIndexPath:.至少他们在这里做…
我建议你采用这个例子,让它在你的环境中运行.然后,您逐步将其逐步修改为您想要的设计.在某些时候,事情将停止工作,然后你将有问题的根源.