我正在尝试并排创建一个包含三个大子视图的视图。这三个子视图都应该是UINAvigationControllers中打包的UITableViews。我正在为UITableViewController使用一个名为" TOGViewController"的子类。这里。
当我设置它时,UITableViews没有更新。出现标题(来自UINAvigationController),但下面的空格保持白色。当我调试它时,我可以看到不会调用cellForRowAtIndexPath。 numberOfSectionsInTableView,numberOfRowsInSection甚至heightForRowAtIndexPath都被调用。但是,cellForRowAtIndexPath永远不会!
CODE(仅适用于第一个最左侧的子视图)
// Create a big scrollview 3 times as wide as the screen and paginate it
CGRect screenRect = self.view.bounds;
CGRect wholeViewRect =screenRect;
wholeViewRect.size.height= screenRect.size.height;
wholeViewRect.size.width= screenRect.size.width * 3.0;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: wholeViewRect];
scrollView.contentSize = wholeViewRect.size;
scrollView.contentOffset = CGPointMake(screenRect.size.width, 0);
scrollView.pagingEnabled = TRUE;
self.view = scrollView;
// Add a view to the left
CGRect firstRect = screenRect;
firstRect.size.width -= 1;
TOGViewController *insightsViewController = [[TOGViewController alloc] init];
insightsViewController.view.frame = firstRect;
[self addChildViewController:insightsViewController];
[scrollView addSubview: insightsViewController.view];
当我使用完全相同的TOGViewController(UITableViewController的子类)并将其直接放在屏幕上时,它工作正常。但是当我将其嵌入到带有两个其他UITableView的滚动视图中时,没有任何表视图显示任何内容。
编辑:我在旧版本的问题中粘贴了错误的代码。每个UITableViewController周围都没有UINavigationController。整个三重视图只有一个UINavigationController,包含3个表视图。
答案 0 :(得分:0)
如果您想在一个视图中使用多个UITableView,每个视图都有自己的导航控制器,那么您希望将每个TableView放在自己的容器视图中。 击>
检查Apple的documentation和各种tutorials在线提供。
有various other个问题涉及此主题。关键是要使每个UITableView成为View的属性:
@property (nonatomic, strong) IBOutlet UITableView* firstTableView;
@property (nonatomic, strong) IBOutlet UITableView* secondTableView;
@property (nonatomic, strong) IBOutlet UITableView* thirdTableView;
您只能为所有这些代码保留一个委托和数据源。然后在您的UITableView委托和数据源方法中,您将包含if语句来检查您所在的UITableView。 例如:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
if (tableView == self.firstTableView) {
...
} else if (tableView == self.secondTableView) {
...
} else {
//thirdTableView code
}
}
答案 1 :(得分:0)
听起来有些东西搞砸了TableViews上的UITableViewDataSource Protocol委托属性。在tableView.datasource对象上调用tableView:cellForRowAtIndexPath:
。虽然我对tableView:numberOfRowsInSection:
被调用的方式感到困惑,但不是tableView:cellForRowAtIndexPath:
。