【问题标题】:iPhone Subclassing view controller and IBOutlet UITableViewiPhone 子类化视图控制器和 IBOutlet UITableView
【发布时间】:2011-02-07 13:08:38
【问题描述】:

我有以下问题。我已经创建了一个与上面非常相似的 ViewController

@interface MyViewController : UIViewController {
    IBOutlet UITableView *myTableView;
}

@property (nonatomic, retain) IBOutlet UITableView *myTableView;

我已将 Interface Builder 上的 myTableView 链接到匹配的 nib 的 UITableView。我已经将 MyViewController 子类化为这样创建 YourViewController:

@interface YourViewController : MyViewController {

}

然后我从 TabBarController 加载选项卡项上的 YourViewController。虽然我可以看到最后确实调用了MyViewController,但是模拟器上并没有显示table view。

我已尝试调试 MyViewController,但似乎 IBOutlet 为 nil。

为什么会这样?

【问题讨论】:

    标签: iphone ios uitableview uiviewcontroller subclassing


    【解决方案1】:

    我在继承、IBOutlets 和 IBAction 方面遇到了重大问题。我建议您避免这种情况,并以另一种方式创建共享内容。

    例如,当我收到内存警告时,我受到了严重的错误打击。在基类和派生类中定义插座和操作时,它们没有正确重新连接。

    【讨论】:

    • 你对如何实现这个有什么建议吗?我所有的子类都在做与 MyViewController 完全相同的事情,唯一改变的是在每个子类上检索数据的方式。我有一种感觉,和initCoder有关:这应该是一个标准的子类化场景……
    • 好吧,我会把所有繁重的工作都放在基类中,并且尽可能地在派生类中有出口和动作。
    【解决方案2】:

    可能 MyViewController 的 nib 文件根本没有加载。您是否为 YourViewController 使用特定的 nib 文件?以及您以哪种方式创建 YourViewController。

    你也可以尝试在 YourViewController 中定义一个“awakeFromNib”方法,然后从中调用 [super awakeFromNib] 吗?

    但是,要了解您的问题,您必须清楚地说明您如何加载对象以及是否以及在何处使用 Nib?

    【讨论】:

    • 我认为你在这里是正确的。 YourViewController 正在通过 nib 加载。 (它被指定为选项卡栏项的 NIB)如果我使用 initWithNibName 加载 YourViewController,它可以正常显示 MyViewController 的 NIB。但是,当从 TabBar Nib 加载时,它不会显示任何内容。我已经按照您的建议尝试了 awakeFromNib,但仍然没有任何结果..
    【解决方案3】:

    如果您使用代码动态添加它,那么只有它会起作用。不使用笔尖。

    【讨论】:

    • 没有办法通过 Nib 加载吗?即使我们覆盖 initWithCoder: 让我们说?
    • 所以我尝试重载 initWithCoder 来调用 initWithNibName 并且它确实有效,尽管现在导航控制器似乎存在问题不切换视图......总有我想的解决方案复制笔尖并将YourController分配为文件所有者并从标签栏加载该笔尖...
    【解决方案4】:

    UITableView(即您的 myTableView)需要数据源及其控制的委托。 而且您的控制器需要指向 xib 中的 Table 视图的链接。

    1. 在控制器的接口部分声明表委托协议。

    2. 使用 IB,将 xib 中的 TableView 链接到所有者文件:委托。

    3. 使用IB,将文件所有者myTableView链接到xib中的tableView。

    我希望它会有所帮助。

    【讨论】:

    • 你在你提到的事情上是对的。我已经完成了这些,但为了简单起见,我没有提到它。问题仍然存在。
    【解决方案5】:

    假设您在 MainWindow.xib 中有整个导航堆栈

    • 打开 MainWindow.xib
    • 选择 YourViewController(或任何你调用 UITableViewController 子类的控制器)
    • 选择属性检查器
    • 确保“NIB 名称”属性选择了正确的 YourViewController(或任何名称)

    我遇到了同样的问题,这为我解决了。

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多