代码之家  ›  专栏  ›  技术社区  ›  ACBurk

为UITableViewController自动加载XIB

  •  5
  • ACBurk  · 技术社区  · 16 年前

    遇到了一些有趣的事情,想知道我是否做错了什么,或者这是不是正确的行为。

    我有一个自定义UITableViewController。我假设(第一个错误)如果你这样初始化:

    [[CustomTableController alloc] init];
    

    它将自动从同名的XIB CustomTableController.XIB加载,如果它位于相同的目录中等等。

    这不起作用;不加载XIB。但是,如果我将控制器的父类从UITableViewController更改为UIViewController,那么一切都正常!

    打电话:

    [[CustomTableController分配]初始化];
    

    从我的xib加载控制器和视图。

    1 回复  |  直到 16 年前
        1
  •  26
  •   MMiroslav    10 年前

    Cocoa Touch中的大多数类都列出了一个“指定的初始值设定项”,您应该从 init 方法的子类。当您创建自己的自定义类时,最好检查文档以找到为您的超类指定的初始值设定项。当您使用更一般的超类中的其他初始值设定项初始化类时(通过调用- [NSObject init]

    initWithNibName:bundle: . 如果用nil nibName调用此方法,它将查找与类名匹配的nib。行为 -init 未记录 UIViewController [self initWithNibName:nil bundle:nil] ,但打电话会更安全 initWithNibName:包: 直接而不是依靠这种无证行为。

    UITableViewController只定义一个初始值设定项, -initWithStyle: (尽管它没有将此方法指定为指定的初始值设定项)。此方法在不使用nib的情况下初始化UITableViewController,这通常很好。由于您不向UITableView添加子视图,因此通过nib配置UITableViewController通常不会获得太多好处。

    -初始样式: initWithNibName:包: 方法。以下是文档告诉我们在每种情况下如何初始化UITableView及其控制器的内容:

    • initWithNibName:包: 方法(由超类UIViewController声明),UITableViewController加载nib文件中存档的表视图。否则,它将创建具有正确尺寸和自动调整大小掩码的未配置UITableView对象。您可以通过tableView属性访问此视图。

    • 如果加载了包含表视图的nib文件,则数据源和委托将成为nib文件中定义的对象(如果有)。如果未指定nib文件或nib文件未定义数据源或委托,UITableViewController会将表视图的数据源和委托设置为self。