IOS:tableview委托两个tableview的方法

时间:2011-06-29 11:11:11

标签: ios xcode uitableview delegates

我在类中的tableview中有这些委托方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [array1 count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease] ; 
}

cell.textLabel.text = [array1 objectAtIndex:indexPath.row];

return cell;
}

如果我有一个UITableView它可以,但如果我有两个UITableView?我该如何组织我的代码?带标签?

4 个答案:

答案 0 :(得分:13)

了解所有委托方法如何包含tableView:(UITableView *)tableView

您可以在头文件中定义表视图,然后只需执行:(假设您的表名为myTable

if (tableView == myTable)

然后你可以拥有任意数量的表格视图。

例如:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [array1 count];
}

变为:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView == myTable)
    {
       return [array1 count];
    }
    if (tableView == myTable2)
    {
       return [array2 count];
    }

    return 0;
}

答案 1 :(得分:3)

我的建议是让您的数据源充当表视图委托,而不是您的控制器。

这是一种更接近模型 - 视图 - 控制器模式的设计,它将允许您更灵活,并避免检查tableView参数在您的委托方法中获得的特定值。

在您的情况下,您的委托/数据源将是一个类型为NSArray的成员并且还实现UITableViewDelegate协议的类。

答案 2 :(得分:1)

是的,你可以用标签来做。为UITableViews提供标签1和2。

设置一个开关:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease] ; 
}

switch ([tableView tag]) {
  case 1:{
    [[cell textLabel] setText:@"First tag"]
    break;
  }
  case 2:{
    [[cell textLabel] setText:@"Second tag"]
    break;
  }
  default:
    break;
}

return cell;
}

答案 3 :(得分:0)

这些方法中的每一个都传递对调用它的表视图的引用。我通常将每个表连接到界面构建器中的插座,并根据与委托方法和插座名称中的tableView的比较有条件地返回数据源。在编辑视图结构时,使用标记也可以这样做,但更复杂,更容易出现并发症。