用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;
}
现在要用storyboard,有两个问题:
1.在prepareForSegue设置变量,怎么不暴露变量或其他实现?
2.能设置默认值吗?
谢谢您的解答。
在使用 Storyboard 时,可以通过在目标视图控制器中定义属性并使用 prepareForSegue 方法来设置变量,而不会暴露这些变量或其他实现。
例如,假设您有一个 Storyboard 中的视图控制器,其中包含一个名为 "note" 的属性,该属性代表要编辑的笔记。您可以在 prepareForSegue 方法中将笔记赋值给该属性,如下所示:
(void) prepareForSegue: (UIStoryboardSegue * ) segue sender: (id) sender
{
if([segue.identifier isEqualToString: @"editNote"])
{
EditNoteViewController * vc = segue.destinationViewController;
vc.note = self.selectedNote;
}
}
在这种情况下,selectedNote 是你在源视图控制器中的属性,而 note 是目标视图控制器中的属性。您可以在目标视图控制器中设置其他默认值,如下所示:
(void) viewDidLoad
{
[super viewDidLoad];
if(!self.note)
{
self.note = [
[Note alloc] init
];
self.isEditing = NO;
}
else
{
self.isEditing = YES;
}
}