Sen*_*ful 4 iphone interface-builder uitableview
我试图遵循iPhone OS的表视图编程指南,但是在创建一个从nib文件加载其数据的新表视图控制器时遇到了问题.
具体来说,我试图按照这一部分中的步骤操作:
如果您希望从nib文件加载由自定义表视图控制器管理的表视图,则必须执行以下操作:
- 在Interface Builder中,创建一个空的Cocoa Touch nib文件(File> New).
- 将UITableViewController对象从Interface Builder库拖到nib文档窗口中.
- 将nib文件以适当的名称保存在项目目录中,并在出现提示时,选择要添加nib文件的项目.
- 在nib文档窗口中选择Table View Controller,然后打开检查器的Identity窗格.将类设置为自定义表视图控制器类.
- 在nib文档窗口中选择File's Owner,并将其类标识设置为自定义表视图控制器类.
- 在Interface Builder中自定义表视图.
- 在nib文档窗口中选择表视图控制器,打开检查器的"属性"窗格,然后在"笔尖名称"字段中输入(或选择)nib文件的名称.
所以我在Xcode中创建了一个新的UITableViewController子类(称为"MyTableViewController"),然后我进入IB并按照这些步骤操作.我确保将所有Class属性链接到与我在Xcode中创建的UITableViewController子类相同的名称,就像它在步骤中所说的那样.
但现在我在IB中收到以下警告:
"我的表视图控制器"具有"视图"和"笔尖名称"属性集.不支持此配置.
当我运行应用程序并推送表视图控制器时,它会出现,但似乎根本没有从nib文件加载任何内容(例如,我将alpha设置为0而不是1).
知道我做错了什么吗?
谢谢您的帮助.
以下是一些可以帮助您更好地了解情况的信息.
我注意到创建UITableViewController与模板之间存在一些差异(例如,通过创建新的基于导航的应用程序)而不是自己创建一个(例如,按照上面的步骤).我将分别将每个引用为TemplateNib和CustomNib,以便更容易理解差异.
在TemplateNib中,它在文档窗口中具有以下对象:
在CustomNib中,它在文档窗口中具有以下对象:
另一个区别是文件所有者链接...
TemplateNib的文件所有者:
CustomNib文件的所有者:
CustomNib我的表视图控制器:
更新:
我尝试通过以下步骤模仿模板创建的.xib文件:
但是,这似乎仍然没有从NIB文件加载它.(我也从来没有在任何地方设置NIB文件的名称......有什么地方我需要设置它或者它是否寻找具有相同名称的文件?).
然后我尝试重写initWithNibName从nib文件的名称加载,现在它似乎从nib文件加载它.但是,如果我查看TemplateNib表视图控制器的.m文件,它不需要重写此方法,为什么呢?我仍然认为我这样做是错误的,因为编程指南没有提到任何关于这样做的事情.
更新:
我尝试使用diff工具比较两个.xib文件,两者之间的唯一显着差异似乎是:
<string key="superclassName">UITableViewController</string>
// and:
<reference key="NSSuperview"/>
Run Code Online (Sandbox Code Playgroud)
我在原始文件中看不到任何对Nib文件的引用,是否还有其他文件我应该检查?
更新:
看起来像是从nib文件加载TemplateNib的东西是MainWindow.xib(模板给出的默认名称),RootViewController添加了NIB Name属性,其值为"RootViewController".此外,它的类设置为"RootViewController".
我尝试在RootViewController上的initWithNibName:bundle:和initWithStyle:中放置一个断点,然而,它永远不会到达那里.我有点想知道当你在MainWindow.xib中设置它时如何创建TableViewController.
我还尝试将我的自定义表视图控制器添加到MainWindow.xib,设置类和nib名称,希望它将从我指定的nib文件加载它,但它甚至不调用iniWithNibName.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:@"MyNibName" bundle:nibBundleOrNil]) {
// Custom initialization
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20870 次 |
| 最近记录: |