UIAlertController 没有锚定在 childViewController 上,而是显示在它后面的 parentViewController 上
UIAlertController not anchored on childViewController but rather displaying behind it on parentViewController
我创建了一个左侧菜单抽屉并将其添加为子视图控制器。在左侧菜单抽屉中,我有一个应显示 UIAlertController 的注销按钮。我遇到的挑战是 UIAlertController 显示在父视图的子视图(左抽屉)后面。
//ParentVC
//adding childVC
DrawerViewController *menuController = [[DrawerViewController alloc] init];
[self addChildViewController:menuController];
[self.view addSubview:menuController.view];
[menuController didMoveToParentViewController:self];
[[[[UIApplication sharedApplication] delegate] window] addSubview:menuController.view];
menuController.definesPresentationContext = YES;
//displaying childVC from parentVC
[UIView animateWithDuration:0.3 animations:^{
[menuController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view setFrame:CGRectMake(self.view.frame.size.width*0.7, 0, self.view.frame.size.width, self.view.frame.size.height)];
}];
//ChildVC
//logout action
-(void) logOutButtonListener:(UIButton *) sender{
NSLog(@"logOutButtonListener");
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Logout" message:@"Are you sure you want to logout?" preferredStyle:UIAlertControllerStyleAlert ];
UIAlertAction* noButton = [UIAlertAction actionWithTitle:@"no" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:noButton];
UIAlertAction* yesButton = [UIAlertAction actionWithTitle:@"yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
//logout logic
}];
[alert addAction:yesButton];
[self presentViewController:alert animated:YES completion:nil];
}
我想要的是在子视图控制器的顶部显示 UIAlertController。
问题是您将 menuController.view 添加到堆栈中所有其他视图控制器(包括警报控制器)之上的主 window。如果您希望菜单位于所有内容之上,但仍在警报控制器下,请将其添加到视图树中除 window 之外的其他内容(请参阅当前的 VC 或堆栈更高的内容)所以它不会出现在警报的顶部。
我创建了一个左侧菜单抽屉并将其添加为子视图控制器。在左侧菜单抽屉中,我有一个应显示 UIAlertController 的注销按钮。我遇到的挑战是 UIAlertController 显示在父视图的子视图(左抽屉)后面。
//ParentVC
//adding childVC
DrawerViewController *menuController = [[DrawerViewController alloc] init];
[self addChildViewController:menuController];
[self.view addSubview:menuController.view];
[menuController didMoveToParentViewController:self];
[[[[UIApplication sharedApplication] delegate] window] addSubview:menuController.view];
menuController.definesPresentationContext = YES;
//displaying childVC from parentVC
[UIView animateWithDuration:0.3 animations:^{
[menuController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view setFrame:CGRectMake(self.view.frame.size.width*0.7, 0, self.view.frame.size.width, self.view.frame.size.height)];
}];
//ChildVC
//logout action
-(void) logOutButtonListener:(UIButton *) sender{
NSLog(@"logOutButtonListener");
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Logout" message:@"Are you sure you want to logout?" preferredStyle:UIAlertControllerStyleAlert ];
UIAlertAction* noButton = [UIAlertAction actionWithTitle:@"no" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:noButton];
UIAlertAction* yesButton = [UIAlertAction actionWithTitle:@"yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
//logout logic
}];
[alert addAction:yesButton];
[self presentViewController:alert animated:YES completion:nil];
}
我想要的是在子视图控制器的顶部显示 UIAlertController。
问题是您将 menuController.view 添加到堆栈中所有其他视图控制器(包括警报控制器)之上的主 window。如果您希望菜单位于所有内容之上,但仍在警报控制器下,请将其添加到视图树中除 window 之外的其他内容(请参阅当前的 VC 或堆栈更高的内容)所以它不会出现在警报的顶部。