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: и сделайте свою конфигурацию там.

Другие вопросы по тегам