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

时间:2012-11-23 22:03:40

标签: ios xcode interface datasource builder

我对Xcode比较陌生。

我试图尽可能在Xcode的Interface Builder中这样做。因为我正在使用遗留代码,故事板不是一种选择。

我正在使用XIB我会称之为DualTVController。它基于一个简单的UIViewContoller。

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

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

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

我在RightDelegate中拥有与LeftTV相同的代理代码(可以工作)。谁能提出这个问题?我负责在代码中实例化RightDelegate吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

注意:我知道您希望在IB中执行此操作,但在这种情况下,这可能最好在代码中处理。在IB中为单个tableview设置委托很简单,但却被忽略了。由于代表是如此重要,我通常会将它们保存在代码中以减少错误。

当您打算使用多个tableview时,有几种方法可以管理委托。

a)管理视图控制器中的两个委托,并在每个委托回调中使用逻辑来确定哪个表视图要求(最终变得混乱) 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控制器中添加代码即可管理tableviews。 如果需要tableview控制器来调用主视图控制器,则使用委托回调。

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