【问题标题】:UITableViewController setting delegates and datasourceUITableViewController 设置委托和数据源
【发布时间】:2010-12-31 08:43:46
【问题描述】:

我对 UITableViewController 有点困惑...就我而言,它们通常是 UITableView 的委托和数据源(尽管可以使它们不同)。

但是在某些情况下,例如在 Interface Builder 中将 UITableViewController 嵌入到 UITabBarViewController 中时,我们会在 IB 中启动我们的表视图控制器。因此,据我了解,正在调用默认初始化程序。

但在这种情况下,我有这段代码:

@interface Settings : UITableViewController {

}

在 IB 中,我看到 UITableView 的委托和数据源已连接到此类。我的问题是,为什么我们不需要明确地说它是跟随:

@interface Settings : UITableViewController <UITableViewDelegate, UITableViewDataSource>     
{
}

在.m文件中:

- (void)viewDidLoad {
    [super viewDidLoad];
    [tableView setDelegate:self];
    [tableView setDataSource:self];
}

我确实偶然发现了一些情况,我必须多次明确地对上述内容进行编码才能使某些事情起作用。虽然它对我来说仍然是一个谜,为什么需要它......

【问题讨论】:

    标签: iphone objective-c ios4 uitableview


    【解决方案1】:

    在超类后面的尖括号中,您可以定义您的类将要实现的协议。协议包含(如 Java 中的接口)方法声明,但没有实现。一些方法被标记为必需,一些被标记为可选。 IE。如果您决定实现一个协议,您至少必须实现所需的协议。

    但是,您不需要表明您将要实施协议。实现所需的就足够了,您的代表将正常工作。不过,指出它是个好主意。如果两者都检测到您的实现中的错误(例如忘记所需的方法,使用错误的方法签名等),Xcode 和编译器会警告您。

    【讨论】:

    • 谢谢,这正是我所需要的。将委托和数据源设置为 self 怎么样?真的需要吗?
    • 是的,这是必需的,因为通过它您可以定义在哪个对象上调用委托方法。您可以将其想象为 tableView “询问”委托和 dataSource 应该显示多少行、部分等以及单元格的外观。所以你必须告诉 tableView 哪个对象是委托(即问谁)。
    • 感谢 Björn,但是当创建一个作为 UITableViewController 子类的新文件时,委托和数据源都将连接到 IB 中的文件本身。这意味着在这种情况下我不必手动执行此操作对吗?
    • 对,您可以在 Interface Builder 中或以编程方式完成。
    • 当你创建一个 UITableViewController 时,默认情况下它是其对应表视图的委托和数据源。
    【解决方案2】:

    使用

    tableView.delegate=self; tableView.dataSource=self;

    而不是

    [tableView setDelegate:self];
    [tableView setDataSource:self];
    

    【讨论】:

    • 没有。这些实现是等效的。
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2017-03-13
    • 2017-02-18
    • 2010-12-10
    相关资源
    最近更新 更多