我正在使用几个垂直放置的UITableViews来完成项目。我必须显示那些表格,但当我试图为每个表格显示不同的表格内容时卡住了。 这是代码:
-(void)setTheTable{
int numberOfTables = 5;
//height of the table
CGFloat height = self.view.bounds.size.height;
CGRect tableBounds = CGRectMake(0.0f, 0.0f, self.widthOfTheScreen, height- 30);
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 30.0f, self.widthOfTheScreen, height - 30.0f)];
self.scrollView.contentSize = CGSizeMake(self.widthOfTheScreen * numberOfTables, height-30);
self.scrollView.pagingEnabled = YES;
self.scrollView.bounds = tableBounds;
[self.view addSubview:self.scrollView];
//put five tables
CGRect tableFrame = tableBounds;
tableFrame.origin.x = 0;
for (int i = 0; i < numberOfTables; i++) {
UITableView *tableView = [[UITableView alloc] initWithFrame:tableFrame style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
switch (i) {
case 0:
tableView.backgroundColor = [UIColor yellowColor];
tableView.tag = 0;
cell.textLabel.text = @"section = 0 行0";
break;
case 1:
tableView.backgroundColor = [UIColor blueColor];
tableView.tag = 1;
break;
case 2:
tableView.backgroundColor = [UIColor brownColor];
tableView.tag = 2;
break;
case 3:
tableView.backgroundColor = [UIColor greenColor];
break;
case 4:
tableView.backgroundColor = [UIColor cyanColor];
break;
default:
break;
}
[self.scrollView addSubview:tableView];
tableFrame.origin.x += self.widthOfTheScreen;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
int num = tableView.tag;
if(num == 1) {
if(indexPath.row == 0) {
cell.textLabel.text = @"section = 0 行0";
} else if(indexPath.row == 1){
cell.textLabel.text = @"section = 0 行1";
} else {
cell.textLabel.text = @"section = 0 行2";
}
} else {
NSString *str = [[NSString alloc] initWithFormat:@"section = %d col %d",indexPath.section,indexPath.row];
cell.textLabel.text = str;
}
return cell;
}
我认为tableview.tag会有所帮助,但给了我5张相同的表格。 你们能给我一些解决这个问题的想法吗?
谢谢。
答案 0 :(得分:1)
首先,请参阅this answer关于向UITableView
添加UIScrollView
,Apple特别警告它(尽管它们未在UITableView
文档中添加警告, 不是你的错)。将您的表格作为子视图添加到UIView
不 a UIScrollView
(我建议将其删除)。
其次,您只能在UITableViewCell
方法中创建tableView:cellForRowAtIndexPath:
。完全从你的for循环中删除对任何UITableCell
的所有引用(甚至没有使用它们,它什么都不起作用)。设置表的数据源和委托后,在每个能够调用[tableView reloadData]
,将自动调用数据源方法。
由于您正在使用多个表,因此事情变得有点棘手。您需要在类中保留对所有表视图的引用(在数组中,但理想情况下是每个表视图的属性)。
您还需要知道在任何给定时间加载的表格,例如:
-(UITableViewCell*)tablView:tableView cellForRowAtIndexPath:indexPath {
UITableViewCell *cell;
if ( tableView == self.tablView1 ) {
// build your cells for table view 1
}
else if ( tableView == self.tableView2 ) {
// build cells for table view 2
}
return cell;
}
对于多个表,您可能希望考虑每个表的特定委托,特别是如果每个表后面的数据模型有很大差异,和/或每个表的每个UI都不同。
我不知道您的确切需求,但也考虑一个包含多个部分而非多个表的表。
我还建议您阅读iOS TableView Programming Guide和this on Delegates and Data Sources。