嵌入另一个视图时UITableView不显示

时间:2014-04-07 14:27:32

标签: ios objective-c uitableview

我正在尝试并排创建一个包含三个大子视图的视图。这三个子视图都应该是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个表视图。

2 个答案:

答案 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: