Вкратце, у меня есть корневой контроллер RootController, представляющий модальный навигационный контроллер, показывающий Controller1, который сам представляет модальный навигационный контроллер, показывающий Controller2.
Я хочу одновременно закрыть Controller1 и Controller2, отправив корневому контроллеру сообщение dismissModalViewControllerAnimated :.
Я ожидал увидеть анимацию отклонения Контроллера2 (или, скорее, его контроллера навигации) и НЕ видеть Контроллер1 в процессе, возвращая меня к корневому контроллеру согласно документации:
Если вы представите несколько модальных представлений
контроллеры подряд, и, таким образом,
построить стек модального представления
контроллеры, вызывающие этот метод на
посмотреть контроллер ниже в стеке
отклоняет свое непосредственное детское представление
контроллер и все контроллеры представления
выше этого ребенка в стеке. когда
это происходит, только самый верхний вид
уволен в оживленном порядке;
любые промежуточные контроллеры вида
просто удаляется из стека.
самый верхний вид отклоняется с помощью его
модальный стиль перехода, который может
отличаются от стилей, используемых другими
просмотр контроллеров ниже в стеке.
Однако Controller2 мгновенно отключается без анимации, и я вижу, что Controller1 отклоняется (с анимацией).
Это может быть недоразумение с моей стороны документации. Если это так, может ли кто-нибудь помочь мне найти решение?
Вот пример кода, который продемонстрирует мою проблему (весь лишний код удален, нет управления памятью, нет обработки ошибок ...):
// AppDelegate.h:
#import <UIKit/UIKit.h>
#import "RootController.h"
@interface AppDelegate : NSObject <UIApplicationDelegate> {
IBOUTLET UIWindow *window;
RootController *rootController;
}
@end
// AppDelegate.m:
#import "AppDelegate.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
rootController = [[RootController alloc] init];
[window addSubview:rootController.view];
[window makeKeyAndVisible];
return YES;
}
@end
// RootController.h:
#import <UIKit/UIKit.h>
#import "Controller1.h"
@interface RootController : UIViewController {
Controller1 *controller1;
UINavigationController *controller1navigationController;
UIButton *button;
}
@end
// RootController.m:
#import "RootController.h"
@implementation RootController
- (void)testMe:(id)target {
controller1 = [[Controller1 alloc] init];
controller1navigationController = [[UINavigationController alloc] initWithRootViewController:controller1];
[self presentModalViewController:controller1navigationController animated:YES];
}
- (void)loadView {
[super loadView];
button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
[button setTitle:@"Test me" forState:UIControlStateNormal];
button.frame = CGRectMake(50, 200, 220, 50);
[button addTarget:self action:@selector(testMe:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
@end
// Controller1.h:
#import <UIKit/UIKit.h>
#import "Controller2.h"
@interface Controller1 : UIViewController {
Controller2 *controller2;
UINavigationController *controller2navigationController;
UIButton *button;
}
@end
// Controller1.m:
#import "Controller1.h"
@implementation Controller1
- (void)testMe:(id)target {
controller2 = [[Controller2 alloc] init];
controller2navigationController = [[UINavigationController alloc] initWithRootViewController:controller2];
[self presentModalViewController:controller2navigationController animated:YES];
}
- (void)loadView {
[super loadView];
button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
[button setTitle:@"Test me 1" forState:UIControlStateNormal];
button.frame = CGRectMake(50, 156, 220, 50);
[button addTarget:self action:@selector(testMe:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
self.view.backgroundColor = [UIColor greenColor];
}
@end
// Controller2.h:
#import <UIKit/UIKit.h>
@interface Controller2 : UIViewController {
UIButton *button;
}
@end
// Controller2.m:
#import "Controller2.h"
@implementation Controller2
- (void)testMe:(id)target {
[self.parentViewController.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];
}
- (void)loadView {
[super loadView];
button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
[button setTitle:@"Test me 2" forState:UIControlStateNormal];
button.frame = CGRectMake(50, 156, 220, 50);
[button addTarget:self action:@selector(testMe:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
self.view.backgroundColor = [UIColor redColor];
}
@end
Спасибо за помощь в поиске решения этой проблемы.