Objective C 在故事板的初始视图控制器中访问 var
Objective C Accessing var in Initial View Controller of Storyboard
使用:
UIViewController *vc = [[UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil] instantiateInitialViewController];
[self presentViewController:vc animated:YES completion:^{}];
但我需要在该故事板的初始 viewController 中设置一个 BOOL。
我在 .h 中声明了 BOOL,并且 if 语句依赖于它:
if (_boolIsTrue) {
FirstView *firstView = (FirstView *)[storyboard instantiateViewControllerWithIdentifier:@"first_view"];
[self.navigationController setViewControllers:@[firstView] animated:NO];
}
else {
SecondView *secondView = (SecondView *)[storyboard instantiateViewControllerWithIdentifier:@"second_view"];
[self.navigationController setViewControllers:@[secondView] animated:NO];
}
当我尝试使用类似以下内容访问它时:
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];
vc 不允许我访问 BOOL。
不确定我不了解 ViewControllers 和 Storyboards 的原因是什么,但我非常感谢您的帮助。
谢谢
解决方案后编辑:
韦恩完全正确!
这是确切的工作代码,因为我的差距跨越了几个不同的概念。如果它对其他人有帮助:
UINavigationController *nav = [[UIStoryboard storyboardWithName:@“MyStoryBoard” bundle:nil] instantiateInitialViewController];
InitialLockSetupViewController *vc = nav.viewControllers.lastObject;
vc.isBoolTrue = YES;
[self presentViewController:nav animated:YES completion:^{}];
因此您必须获得具有正确类型的视图控制器才能访问 var。但是如果它没有被设置为故事板中的初始视图控制器,你必须将它作为堆栈上的根(第 0 个)视图控制器。那么你必须记住按下导航控制器而不是视图控制器。
再次感谢韦恩。这是一个很好的教训!
您根本不明白编译器需要知道 class 类型。目前你告诉编译器 class 是 UIViewController
并且它显然没有你的自定义 属性。您需要将 class 设置为自定义的,例如:
MyViewController *vc = [storybord instantiateInitialViewController];
此外,请确保您不要多次调用 instantiateInitialViewController
,否则您将拥有相同 class 的多个副本,并且可能会使用错误的副本...
使用:
UIViewController *vc = [[UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil] instantiateInitialViewController];
[self presentViewController:vc animated:YES completion:^{}];
但我需要在该故事板的初始 viewController 中设置一个 BOOL。
我在 .h 中声明了 BOOL,并且 if 语句依赖于它:
if (_boolIsTrue) {
FirstView *firstView = (FirstView *)[storyboard instantiateViewControllerWithIdentifier:@"first_view"];
[self.navigationController setViewControllers:@[firstView] animated:NO];
}
else {
SecondView *secondView = (SecondView *)[storyboard instantiateViewControllerWithIdentifier:@"second_view"];
[self.navigationController setViewControllers:@[secondView] animated:NO];
}
当我尝试使用类似以下内容访问它时:
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];
vc 不允许我访问 BOOL。
不确定我不了解 ViewControllers 和 Storyboards 的原因是什么,但我非常感谢您的帮助。
谢谢
解决方案后编辑: 韦恩完全正确!
这是确切的工作代码,因为我的差距跨越了几个不同的概念。如果它对其他人有帮助:
UINavigationController *nav = [[UIStoryboard storyboardWithName:@“MyStoryBoard” bundle:nil] instantiateInitialViewController];
InitialLockSetupViewController *vc = nav.viewControllers.lastObject;
vc.isBoolTrue = YES;
[self presentViewController:nav animated:YES completion:^{}];
因此您必须获得具有正确类型的视图控制器才能访问 var。但是如果它没有被设置为故事板中的初始视图控制器,你必须将它作为堆栈上的根(第 0 个)视图控制器。那么你必须记住按下导航控制器而不是视图控制器。
再次感谢韦恩。这是一个很好的教训!
您根本不明白编译器需要知道 class 类型。目前你告诉编译器 class 是 UIViewController
并且它显然没有你的自定义 属性。您需要将 class 设置为自定义的,例如:
MyViewController *vc = [storybord instantiateInitialViewController];
此外,请确保您不要多次调用 instantiateInitialViewController
,否则您将拥有相同 class 的多个副本,并且可能会使用错误的副本...