我刚刚为我的iPhone应用程序创建了一个新的视图控制器。
用户点按按钮时会触发视图控制器。
视图控制器的指定初始值设定项是默认的(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
。
我会使用initWithID:(NSInteger)id
这样的初始值设定项,但是如何调用指定的初始值设定项?
答案 0 :(得分:5)
我不喜欢使用
构建视图控制器所提供的可移植性- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
所以我经常只在内部使用它,但它可能看起来像这样
- (id)initWithId:(NSString *)identification
{
self = [super initWithNibName:@"nibName" bundle:nil];
if (self) {
_identification = identification;
}
return self;
}
请注意,您不应使用id
作为名称,因为它是一种类型,因此令人困惑
如果视图控制器A
正在构建视图控制器B
,我想如果我的代码足够松散,那么B
应该比A
更好。应该加载nib B
。
答案 1 :(得分:1)
在.h文件中创建一个名为:
的方法- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil ID:(NSInteger)idNumber;
然后在.m文件中,将方法实现为:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil ID:(NSInteger)idNumber; {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self != nil){
// use the idNumber here!
}
return self;
}
修改我在id
中使用了NSInteger
,因为他在问题中使用了它。我现在把它改为idNumber
,因为人们似乎不喜欢它。
希望有所帮助!
答案 2 :(得分:0)
你可以这样做:
.h文件
-(id)initWithID:(NSInteger)id;
.m文件
-(id)initWithID:(NSInteger)id{
self = [super initWithNibName:@"nib name" bundle:nil];
if(self){
//do what you want with the id
}
return self;
}
答案 3 :(得分:0)
执行此操作的标准方法是使用属性(至少在Apple的大部分示例代码中都是如此)。
在.h:
@interface MyViewController {
NSInteger viewID;
}
@property (assign) NSInteger viewID;
@end
在.m:
@synthesize viewID;
在推动它的View Controller中:
MyViewController *controller = [[MyViewController alloc] init];
controller.viewID = integerValue;
// and push the view controller
顺便说一句,如果nib名称与类名相同,那么alloc-init将具有相同的效果。