【问题标题】:2 UITableViews in 1 ViewController. Set Delegate & DataSource to different UITableViewController file1 个 ViewController 中的 2 个 UITableViews。将 Delegate 和 DataSource 设置为不同的 UITableViewController 文件
【发布时间】:2011-12-29 19:03:30
【问题描述】:

所以我的 ViewController 中有两个 UITableView,如何将第二个的委托和数据源设置为另一个 UITableViewController 文件的委托和数据源。

对于第二个,我目前正在这样创建它

 //now add our second tableview
UITableView *addPapersTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 415)];

addPapersTableView.dataSource = self;
addPapersTableView.delegate = self;
[addPapersView addSubview:addPapersTableView];

并且由于self 位,它明显地提取数据并从同一个文件中委派。 我会做类似#import "AddMoreTableViewController.h" 之类的事情吗?

对 Objective C 来说真的很陌生,

非常感谢,

敏捷

【问题讨论】:

    标签: ios objective-c uitableview cocoa-touch uikit


    【解决方案1】:

    你让你的生活复杂化了。

    firstTableView.dataSource = self;
    firstTableView.delegate = self;
    
    secondTableView.dataSource = self;
    secondTableView.delegate = self;
    

    UITableViewDelegate 和 UITableViewDataSource 协议的所有方法都有一个 UITableView* 参数,因此您可以处理这两个表视图。 例如:

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        if (tableView == firstTableView) {
            return 1;
        }
        else {
             return 4;
        }
    }
    

    【讨论】:

    • 同意,简化你的生活:)
    • 双重同意,虽然杰里米在这种情况下回答了我的问题,但您的回答很棒!谢谢你:)
    【解决方案2】:

    按照您的建议添加导入:

    #import "AddMoreTableViewController.h"
    

    一定要创建它的一个实例,然后将 设置为其他表的委托/数据源。这是一个粗略的例子(我将把内存管理和语义留给你):

    AddMoreTableViewController *controller = [AddMoreTableViewController alloc] init];
    myOtherTableView.datasource = controller;
    myOtherTableView.delegate = controller;
    

    您必须确保在AddmoreTableViewController 中实现协议UITableViewDataSourceUITableViewDelegate

    【讨论】:

      【解决方案3】:

      或者您可以为第二个UITableView 写一个tag & 在代表中根据他们的tag 以不同的方式处理不同的表。

      - (UITableViewCell *)tableView:(UITableView *)tableView 
               cellForRowAtIndexPath:(NSIndexPath *)indexPath
      {
          if(tableView.tag == 1)
              //handle table 1 here.
          else if(tableView.tag == 2)
              //handle table 2 here.
          return;
      }
      

      【讨论】:

      • 好极了,不知道这个!虽然 Jeremy 在这种情况下回答了我的问题,但我感谢您的回答并查看 tag :) 谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多