我试图实现像twitter的iOS应用程序这样的视图。视图控制器包含一个滚动视图,可以水平滚动,在scrollview的每个页面中,都有一个tableview。为简单起见,我刚刚创建了两个UITableView,并将它们添加到两个UIView容器中,因为除了tableView之外,我还有一些要显示的视图,因此tableView和所有其他视图都被添加为每个页面的viewContainer的子视图。
视图层次结构如下:
UIViewController
--view
--scrollView
--view1
--tableView1
--someOtherViews
--view2
--tableView2
--someOtherViews
在viewDidLoad方法中,我实现了类似的东西:
-(void)viewDidLoad
{
//Some other setup...
scrollView = [[UIScrollView alloc]initWithFrame(0,y0,self.view.frame.size.width,self.view.frame.size.height-offset)];
scrollView.pageEnabled = YES;
scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height - offset);
[self.view addSubView:scrollView];
view1 = [[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset)];
tableView1 = [[UITableView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset) style:UITableViewStyleGrouped];
tableView1.delegate = self;
tableView1.dataSource = self;
//other setup...
[view1 addSubView:tableView1];
[scrollView addSubView:view1];
view2 = [[UIView alloc]initWithFrame:CGRectMake(self.view.frame.size.width,0,self.view.frame.size.width,self.view.frame.size.height-offset)];
tableView2 = [[UITableView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset) style:UITableViewStyleGrouped];
tableView2.delegate = self;
tableView2.dataSource = self;
//other setup...
[view2 addSubView:tableView2];
[scrollView addSubView:view2];
}
出于测试目的,我为两个表填充相同的数据源。问题是如果我只添加一个tableView容器(例如view1,其中包括tableView1)作为scrollView的子视图,视图显示完美,可以页面到第二页,这是空白,视图控制器可以加载和节目。第二个也一样。
但是,如果我使用上面的代码,它将两个视图容器添加为scrollView的子视图,则加载此视图控制器时应用程序将崩溃。但是,如果我添加第二个视图容器(view2或view1),但在视图容器中,我不是将tableView添加为其子视图,而是有其他子视图,它可以很好地工作。
所以我认为问题可能来自两个tableViews。但是,我试着调试了几个小时,但仍然没有运气。有人可以帮帮我吗?
谢谢!
答案 0 :(得分:0)
我认为这与您UITableViewDelegate
或DataSource
方法有关。
可能是你崩溃的原因。
-Suggestion:
尝试将UITableView
设为iVar和dataSource
方法
指定您想要的tableView
像:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
{
if(tableView == _tableView1)
return _table1DataSource.count;
else
return _table2DataSource.count;
}
尝试用其他方法。