qui*_*qui 20 iphone objective-c universal ipad
我已经使用XCode中的向导将iPhone应用程序转换为通用应用程序.
它建立得很好但显然在某些方面看起来有点垃圾:)
我需要根据使用的设备加载笔尖.我不希望创建我的视图控制器,initWithNib
因为我已经有代码来创建带有一些数据(initWithMyLovelyData
)的控制器,它与nib加载没有任何关系.
我知道要找出你使用的设备,UI_USER_INTERFACE_IDIOM()
所以我尝试覆盖initWithNibName
实际的视图控制器本身,假设它们以某种方式在内部调用.但它不起作用,因为我猜我不确定语法.
我试过了
if(ipad..) self = [super initWithNibName:@"MyIpadNib" bundle:nibBundleOrNil];
Run Code Online (Sandbox Code Playgroud)
这不起作用:/
编辑 - 我知道我已经大量编辑了这个,在做了一些更多的研究之后让我的问题更加具体 - 道歉!
Ada*_*dam 75
实际上,Apple会自动执行所有操作,只需命名您的NIB文件:
MyViewController~iphone.xib // iPhone
MyViewController~ipad.xib // iPad
Run Code Online (Sandbox Code Playgroud)
并使用最少量的代码加载视图控制器:
[[MyViewController alloc] initWithNibName:nil bundle:nil]; // Apple will take care of everything
Run Code Online (Sandbox Code Playgroud)
kub*_*ubi 22
编辑:@ Adam的答案是正确的答案.
要确定要加载哪个nib,请执行以下操作,并废弃initWithMyLovelyData
方法并使用属性设置数据.您应该能够轻松地将所有初始化代码移动到属性setter方法中.
MyViewController *viewController;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
viewController = [[MyViewController alloc] initWithNibName:@"ipadNIB" bundle:nil];
} else {
viewController = [[MyViewController alloc] initWithNibName:@"iphoneNIB" bundle:nil];
}
viewController.myLovelyData = someData;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21825 次 |
最近记录: |