Ios Xcode:在Interface Builder中将对象指定为UITableView数据源/委托

Ios Xcode:在Interface Builder中将对象指定为UITableView数据源/委托,ios,xcode,interface,datasource,builder,Ios,Xcode,Interface,Datasource,Builder,我对Xcode比较陌生 我正在尽可能多地在Xcode的Interface Builder中实现这一点。因为我使用的是遗留代码,所以故事板不是一个选项 我在和一个XIB合作我会打电话给DualTVController。它基于一个简单的UIViewController 在这个XIB中,我有两个UITableView,LeftTV和RightTV。在IB中,我能够将LeftTV的委托/数据源分配给文件的所有者,这是XIB的类表示。这个很好用 我想在IB中分配RightTV的委托/数据源。到目前为止,我

我对Xcode比较陌生

我正在尽可能多地在Xcode的Interface Builder中实现这一点。因为我使用的是遗留代码,所以故事板不是一个选项

我在和一个XIB合作我会打电话给DualTVController。它基于一个简单的UIViewController

在这个XIB中,我有两个UITableView,LeftTV和RightTV。在IB中,我能够将LeftTV的委托/数据源分配给文件的所有者,这是XIB的类表示。这个很好用

我想在IB中分配RightTV的委托/数据源。到目前为止,我已经成功地使用了LeftTV,但这只是让人困惑

相反,我创建了一个名为RightDelegate的UITableViewController子类,并将其指定为通过IB创建的简单对象的类。我使其遵循UITableViewDataSource和UITableViewDelegate协议。这允许我在IB中将RightTV的委托/数据源连接到它,但是当我尝试运行它时,我得到了一个错误的访问错误

我在RightDelegate中的委托代码与在LeftTV中的委托代码相同(它可以工作)。有人能提出这个问题吗?我是否负责在代码中实例化RightDelegate


谢谢你的帮助

注意:我知道您希望在IB中执行此操作,但在本例中,这可能是最好的代码处理方式。在IB中为单个tableview设置委托很简单,但常常被忽略。由于代理非常重要,我通常将它们保存在代码中,以减少错误

当您要使用多个tableview时,有几种方法可以管理代理

a) 使用每个委托回调上的逻辑来管理视图控制器中的两个委托,以确定哪个tableview正在请求(结果很混乱) b) 通过将一个代理留在vc中,将另一个代理放在自己的单独控制器中来分割代理(有些混乱)

c) 通过为每个tableview使用单独的tableview控制器实例来拆分代理。这可能是最好的选择,但它确实需要3个控制器-初始化xib文件的初始视图控制器,然后是两个单独的tableview控制器-leftTable和rightTable

在主视图控制器中,确保为每个tableview设置了一个属性: 然后包括视图控制器 然后初始化tableview控制器并设置代理

//Example
self.rtv = [[rightTableViewController alloc] init];  //create a strong property for this
self.rtv.delegate = self;  //let it talk back to you if needed

self.ltv = [[leftTableViewController alloc] init];
self.ltv.delegate = self; 

self.rightTableView.delegate = rtv;
self.rightTableView.datasource = rtv;

self.leftTableView.delegate = ltv;
self.leftTableView.datasource = ltv;
然后在每个tableview控制器中添加代码来管理tableview。 如果需要tableview控制器调用主视图控制器,请使用委托回调


希望这有帮助,祝你好运。

CocoaEv,这就是我所需要的。我只是想确定我是在充分利用IB的优势,但您的建议告诉我,在代码中执行类似的操作是多么必要。代码示例也有很大帮助。正好赶上我周一的时候。非常感谢!!!