PushViewController для текущего контроллера навигации из другого класса
Я создаю объект класса из моего UIViewController и пытаюсь вытолкнуть из него контроллер, и он не будет работать.
Я занимался исследованиями, но ничего не нашел, есть идеи?
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.newClass = [[MyNewClass alloc] init];
self.newClass.view = self.view;
self.newClass.navigationController = self.navigationController;
[self.newClass connect];
}
...
@end
MyNewClass.h
@interface MyNewClass : NSObject<UINavigationControllerDelegate>
@property(nonatomic, retain) UIView *view;
@property(nonatomic, retain) UINavigationController *navigationController;
-(void) connect;
@end
MyNewClass.m
-(void)connect
{
OtherViewController * otherVC =
[[OtherViewController alloc] init];
self.navigationController pushViewController:otherVC animated:YES];
}
...
3 ответа
Добавить следующий код в метод didFinishLaunchingWithOptions в appdelegate.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self copyDatabaseIfNeeded];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window makeKeyAndVisible];
return YES;
}
а затем удалите все другие объявления и выделения UINavigationController. Как и MyNewClass's NavigationVontroller. Потому что здесь вы объявляете и выделяете навигационный контроллер в appdelegate, чтобы вы могли использовать его во всем приложении.
Вы выдвигаете viewController из контроллера, который не является частью navigationController, поэтому сначала сделайте его частью navigationController, а затем попробуйте
Когда viewDidLoad
вызывается, представление только что загружено, но контроллер представления еще не обязательно был добавлен в контроллер навигации. Итак, используя viewDidLoad
так как твой триггер не полезен.
Лучшим подходом является явная передача контроллера навигации в контроллер представления при его создании. Или реализовать didMoveToParentViewController:
и сделайте свою конфигурацию там.