2

我对 Xcode 比较陌生。

我试图在 Xcode 的 Interface Builder 中尽可能地做到这一点。因为我使用的是遗留代码,所以不能选择 Storyboard。

我正在使用 XIB,我将调用 DualTVController。它基于一个简单的 UIViewContoller。

在这个 XIB 中,我有两个 UITableView,LeftTV 和 RightTV。在 IB 中,我可以将 LeftTV 的委托/数据源分配给 File's Owner,这是 XIB 的类表示。这工作正常。

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

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

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

谢谢你的帮助。

4

1 回答 1

1

注意:我知道您想在 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 控制器中添加代码来管理 tableviews。如果您需要 tableview 控制器来调用您的主视图控制器,请使用委托回调。

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

于 2012-11-24T05:22:46.233 回答