2011-02-07 31 views
2

我有以下问题。我创建了一个视图控制器很像上面iPhone子类化视图控制器和IBOutlet UITableView

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

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

我联系myTableView在Interface Builder来匹配笔尖的UITableView的。我已经子类MyViewController创建YourViewController像这样:

@interface YourViewController : MyViewController { 

} 

然后我从一个TabBarController的YourViewController加载上一个标签项。尽管我可以看到最终调用了MyViewController,但模拟器上没有显示任何表视图。

我试过调试MyViewController,它看起来IBOutlet是零。

这是为什么?

回答

0

我遇到了继承和IBOutlets和IBAction的主要问题。我建议你避免这种情况,并以另一种方式创建共享内容。

例如,在获取内存警告时,我受到了很多bug的打击。当在基类和派生类中定义出口时,出口和动作没有正确重新连接。

+0

对于如何实现这个,你有什么建议吗?我的所有子类都和MyViewController完全一样,唯一改变的是数据在其中每一个上被检索的方式。我有一种与initCoder有关的感觉:这应该是一个标准的子类场景...... – mobius 2011-02-07 13:18:36

+0

那么,我会保留所有繁重的工作在基类中,并且只有派生类中的出口和动作,尽可能多尽可能。 – jv42 2011-02-07 13:22:08

0

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

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

但是要理解你的问题,你必须清楚地解释你如何加载对象,以及如何和在哪里使用Nibs?

+0

我认为你在这里是正确的。 YourViewController通过一个笔尖加载。 (它被指定为标签栏项的NIB)如果我使用initWithNibName加载YourViewController,它可以正常显示MyViewController的NIB。但是,从TabBar Nib加载时,它不显示任何内容。我已经按照你的建议尝试了awakeFromNib,但没有发现任何问题。 – mobius 2011-02-07 13:28:32

0

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

+0

有没有办法通过Nib加载它?即使我们覆盖initWithCoder:让我们说? – mobius 2011-02-07 13:55:33

0

UITableView(即您的myTableView)需要委托数据源和其控制。 而你的控制器需要一个链接到xib中的Table视图。

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

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

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

我希望这会有所帮助。

-1

假设你在MainWindow.xib中

  • 打开主窗口你的整个导航堆栈。厦门国际银行
  • 选择YourViewController(或任何你的控制器是子类的UITableViewController的叫法)
  • 选择属性检查器
  • 确保“NIB名称”属性的正确YourViewController选择
(或名称等等)

我有这个完全相同的问题,这解决了它对我来说。

相关问题