2013-06-19 44 views
3

随着xibs,你可以调用不同的初始值:从xib移动到故事板时的封装?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Fetch Note... 
    // Initialize Edit Note View Controller with the fetched Note 
    EditNoteViewController *vc = [[EditNoteViewController alloc] initWithNote:note]; 

    // Push View Controller onto Navigation Stack 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

这让我保持我的变量(在EditNoteViewController)私人和我也可以设置默认值,一些变量,例如中

- (id)initWithNote:(Note *)note { 
    // .... 
    if (self) { 
     self.note = note; 
     self.isEditing = YES; 
    } 
    return self; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    //... 
    if (self) { 
     self.isEditing = NO; 
    } 
    return self; 
} 

我现在想用故事板的工作:

  • 有设置从prepareForSegue变量不暴露变量或任何其他执行的好方法?
  • 我该如何设置默认值?

请尽可能

回答

-1

你应该用户prepareForSegue。只会暴露你需要在接收视图控制器

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
// Prepare for next view controller 
    if ([segue.identifier isEqualToString:@"someThing"]) { 
    SomeThingViewController *viewController = segue.destinationViewController; 
    viewController.someProperty = @"something else"; 
    } 
} 

酒店someProperty需要在标题中被暴露SomeThingViewController

@property (nonatomic, strong) NSString *someProperty; 

要设置默认值,检查属性的值是什么in viewDidLoad接收视图控制器

if (someProperty==nil) someProperty = @"Default"; 
0

为明确可以使用- initWithCoder:

是否实例从笔尖或故事板一个UIViewController此方法被调用。

- (id)initWithCoder:(NSCoder *)aDecoder { 

    if (self) { 
     // initializations here 
    } 
    return self; 
}