使用值初始化ViewController

时间:2011-08-21 16:33:40

标签: iphone objective-c cocoa uiviewcontroller

我刚刚为我的iPhone应用程序创建了一个新的视图控制器。

用户点按按钮时会触发视图控制器。 视图控制器的指定初始值设定项是默认的(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

我会使用initWithID:(NSInteger)id这样的初始值设定项,但是如何调用指定的初始值设定项?

4 个答案:

答案 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将具有相同的效果。