如何在ios中的单个View Controller中使用两个UITableView

时间:2014-11-10 12:17:07

标签: ios objective-c uitableview

如何在ios中的单个View Controller中使用两个UITableView。在我的应用程序中我设计了textview和tableview(FirstTableVie)中的按钮。我尝试在其中一个textfield中实现comboBox。这就是我为comboBox tableview(SecondTableView)实现委托函数,而我运行它时显示FirstTableView没有显示FirstTableView。所以我发现我在单个ViewController中实现了两个打包视图。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(tableView==self.FirstTableView)
    {
        return 0;
    }
    else if(tableView==self.SecondTableView){
        return [stateArray count];
    }
    return 0;
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell;
    if(tableView==self.FirstTableView)
    {
    }
    else if(tableView==self.SecondTableView)
    {
        static NSString *identifier=@"Cell";
        cell=[tableView dequeueReusableCellWithIdentifier:identifier];
        if(cell==nil)
        {
            cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        }
        cell.textLabel.text=[stateArray objectAtIndex:indexPath.row];
    }
    return cell;
}

4 个答案:

答案 0 :(得分:1)

也许只需创建自定义类/对象,您可以设置委托方法让它们拥有它并在自定义类中实现委托方法。

即。

@interface TableViewHandler : NSObject
@end
@implmentation
// implement delegate methods
@end

然后初始化并分配这些对象并将它们分配给两个表视图的委托。

所以在你的视图控制器中你可以做到

tableViewHandler *one = [[TableViewHandler alloc] init]; // you can implment an init if you want otherwise it goes to the NSObject init

然后将第一个表视图的委托方法分配给此对象。

所以代替了viewController中的典型

myTableview.delegate = self
你会做的

myTableView.delegate = self.one; 

当然还有dataSource。

如果这个表视图或者你可以分离代码,那么这样做的好处就是。

这取决于您是否希望重用代码。 ViewControllers中的重用性较低,如果使用此类或那个或那个类。可以根据需要干净地修改自定义类并将其转移到其他项目。例如,如果你想在另一个项目中使用这些表中的一个,你就会搞乱从你添加if else逻辑的所有委托方法中复制和粘贴。如果您隔离代码,则只需移植文件即可。

答案 1 :(得分:1)

你可以像下面这样检查。我只写了条件而不是整个代码..

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(tableView==self.FirstTableView)
    {
        return 0;
    }
    else if(tableView==self.SecondTableView){
        return [stateArray count];
    }
    return 0;
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
     UITableViewCell *cell;
     static NSString *identifier=@"Cell";
    cell=[tableView dequeueReusableCellWithIdentifier:identifier];
    if(cell==nil)
    {
      cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    if(tableView==self.FirstTableView)
    {
    }
    else if(tableView==self.SecondTableView)
    {
        cell.textLabel.text=[stateArray objectAtIndex:indexPath.row];
    }
    return cell;
}

希望它可以帮助你..

答案 2 :(得分:0)

将标签添加到两个tableview并检查处理中是否有条件 表视图委托像

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(tableView.tag==1) {
   } else {
    }

}

我刚刚发布了如何处理的逻辑

答案 3 :(得分:0)

其实我在这里看不到问题。每个委托和dataSource协议方法都返回对特定TableView的引用。只需将视图控制器设置为两个表的委托,并找出在回调中使用哪两个。您可以按标记区分表。

示例:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView.tag == 1) {
        return 5;
    }else if (tableView.tag == 2){
        return 10;
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell;
    if (tableView.tag == 1) {
        cell = [self configreCellForFirstTableAtIndexPath:indexPath];
    }else if (tableView.tag == 2){
       cell = [self configreCellForSecondTableAtIndexPath:indexPath];
    }
    return cell;
}