很抱歉,如果这看起来像一个简单的问题,但每次我在google上搜索此主题时,我都能找到如何将数据从子视图传递到父视图,而不是相反。
基本上,我提出了一个模态视图,它位于自己的UINavigation控制器中。模态视图需要知道是否允许用户“编辑”它 - 所以我认为最简单的方法是将子视图(isEdit)上的BOOL设置为TRUE(这将得到根据正在发生的segue设置)但是因为这个模态视图是从UINavigation控制器呈现的 - 我无法从 - (void)prepareForSegue函数访问它并直接设置BOOL。我已经尝试了子类化UINav控制器,并在其中包含一个可以设置的BOOL,然后在子视图中检查,但我似乎无法从子视图访问控制器 - 我会包含我的代码,但我确定必须有一种更简单的方法来完成这项任务!
是否有人能够建议一种更经济的方式将此布尔值“通过”UINavigationController传递给子视图?
由于
答案 0 :(得分:5)
如果您的segue调用导航控制器,您可以从-prepareForSegue
设置根视图控制器上的属性,如此
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"MySegueId"]) {
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
MyViewController *childController = (MyViewController *)navController.childViewControllers.lastObject;
childController.isEditable = YES;
}
}
答案 1 :(得分:0)
当您分配/初始化模态视图控制器时,只需设置属性(比如您的模态视图控制器称为ProfileVC):
ProfileVC *vc = [[ProfileVC alloc] init];
vc.isEdit = YES;
[vc.navigationController presentModalViewController:vc animated:YES];
请确保在您的ProfileVC.h中有一个名为isEdit的属性:
@interface ProfileVC : UIViewController
@property (nonatomic) BOOL isEdit;
@end