繁体   English   中英

Xcode:在Interface Builder中将对象分配为UITableView数据源/代理

[英]Xcode: Assigning an Object as a UITableView datasource/delegate in Interface Builder

我对Xcode比较陌生。

我正在尝试尽可能在Xcode的Interface Builder中执行此操作。 因为我使用的是旧版代码,所以无法选择情节提要。

我正在使用XIB,我将其称为DualTVController。 它基于简单的UIViewContoller。

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

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

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

我在RightDelegate中有和在LeftTV中相同的委托代码(有效)。 谁能提出这个问题? 我负责在代码中实例化RightDelegate吗?

谢谢你的帮助。

注意:我知道您想在IB中执行此操作,但是在这种情况下,最好用代码处理。 在IB中为单个表视图设置委托很简单,但容易被忽略。 由于代表非常重要,因此我通常将他们保留在代码中,以减少错误。

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

a)使用每个委托回调上的逻辑来管理视图控制器中的两个委托,以确定哪个tableview正在询问(结束混乱)b)通过将一个留在您的vc中并将另一个放置在其自己的单独控制器中来拆分委托(有些令人困惑)

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

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

//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控制器来调用主视图控制器,请使用委托回调。

希望对您有帮助,祝您好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM