PushViewController从另一个类到当前导航控制器

时间:2013-12-11 13:28:33

标签: ios objective-c uiviewcontroller uinavigationcontroller uinavigation

我正在从我的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 个答案:

答案 0 :(得分:0)

将以下代码添加到appdelegate的didFinishLaunchingWithOptions方法中。

- (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的NavigationVontroller一样。因为在这里你在appdelegate中声明和分配navigationcontroller,所以你可以在整个app中使用它。

答案 1 :(得分:0)

调用viewDidLoad时,刚刚加载了视图,但视图控制器尚未添加到导航控制器中。因此,使用viewDidLoad作为触发器是没有用的。

更好的方法是在创建导航控制器时将其显式传递给视图控制器。或者实施didMoveToParentViewController:并在那里进行配置。

答案 2 :(得分:0)

您正在从控制器推送一个viewController,该控制器不是navigationController的一部分,所以首先使它成为navigationController的一部分,然后尝试