Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过uinavigationcontroller将变量从父视图传递到子视图_Ios_Xcode_Modalviewcontroller - Fatal编程技术网

Ios 通过uinavigationcontroller将变量从父视图传递到子视图

Ios 通过uinavigationcontroller将变量从父视图传递到子视图,ios,xcode,modalviewcontroller,Ios,Xcode,Modalviewcontroller,抱歉,如果这看起来是一个简单的问题,但每次我在谷歌上搜索这个主题,我能找到的就是如何将数据从子视图传递到父视图,而不是从父视图传递到子视图 基本上,我展示的是一个模态视图,它位于自己的UINavigation控制器中。模态视图需要知道是否允许用户对其进行“编辑”-因此我认为最简单的方法是将子视图上的BOOL(isEdit)设置为TRUE(这将根据发生的顺序进行设置)但是,由于此模式视图是从UINavigation控制器显示的,因此我无法从-(void)prepareforsgue函数访问它并直接

抱歉,如果这看起来是一个简单的问题,但每次我在谷歌上搜索这个主题,我能找到的就是如何将数据从子视图传递到父视图,而不是从父视图传递到子视图

基本上,我展示的是一个模态视图,它位于自己的UINavigation控制器中。模态视图需要知道是否允许用户对其进行“编辑”-因此我认为最简单的方法是将子视图上的BOOL(isEdit)设置为TRUE(这将根据发生的顺序进行设置)但是,由于此模式视图是从UINavigation控制器显示的,因此我无法从-(void)prepareforsgue函数访问它并直接设置BOOL。我已经尝试过对UINav控制器进行子类化,并在其中包含一个可以设置的BOOL,然后在子视图中重新检查,但我似乎无法从子视图访问控制器-我将包含我的代码,但我确信必须有一种更简单的方法来完成此任务

有人能推荐一种更经济的方法将这个布尔值“通过”UINavigationController传递给子视图吗


感谢您在分配/初始化模态视图控制器时,只需设置属性即可(假设模态视图控制器名为ProfileVC):

只需确保在ProfileVC.h中有一个名为isEdit的属性:

@interface ProfileVC : UIViewController
@property (nonatomic) BOOL isEdit;
@end

当您alloc/init模态视图控制器时,只需设置属性即可(假设模态视图控制器名为ProfileVC):

只需确保在ProfileVC.h中有一个名为isEdit的属性:

@interface ProfileVC : UIViewController
@property (nonatomic) BOOL isEdit;
@end

如果segue调用导航控制器,则可以从
-prepareforsgue
设置根视图控制器上的属性,如下所示

- (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;
    }
}

如果segue调用导航控制器,则可以从
-prepareforsgue
设置根视图控制器上的属性,如下所示

- (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;
    }
}

如果你正在使用故事板,或者你正在通过编程调用segue。如果没有,您可以按照Joel的建议,在初始化子视图控制器时设置属性。如果您正在使用故事板,或者您正在通过编程调用segue。如果没有,你可以按照Joel的建议,在初始化子视图控制器时设置属性。也就是说,通过这种方式,在使用childVC初始化navController之前,您可以使用
–initWithRootViewController:
。OP说nav控制器本身是模态的。也就是说,这样做,在使用childVC初始化navController之前,可以使用
–initWithRootViewController:
设置属性。