0

我正在尝试使用 iOS 5.0 通过触摸按钮从一个视图导航到另一个视图。

我正在使用的代码

- (IBAction)Actionlogin:(id)sender {
    NSLog(@" login button has been pressed");
       NSLog(@"In init");
        test_details *aSecondPageController=[[test_details alloc]initWithNibName:@"test_details" bundle:nil];
       [self.navigationController pushViewController:aSecondPageController animated:NO];
      }

我有两个 xib 文件test_details_iPhone.xibtest_details_iPad.xib

在我的 testdetails.m 里面

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    NSLog(@"it is coming here in second view");
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {
        // Custom initialization
    }
    NSLog(@"it has been returned ");
    return self;


}

日志

2013-04-25 11:06:17.191 app_gototest[3067:207]  login button has been pressed
2013-04-25 11:06:17.194 app_gototest[3067:207] In init
2013-04-25 11:06:17.195 app_gototest[3067:207] it is coming here in second view
2013-04-25 11:06:17.196 app_gototest[3067:207] it has been returned 

视图没有加载到视图上。我想我错过了一些东西。

应用程序:didFinishLaunchingWithOptions:appDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

** 我正在尝试 Jasper Blue 的方法**

argc    int 1
argv    char ** 0xbfffed2c
*argv   char *  0xbfffee44

在 appDeleagte.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        UINavigationController* navigationController; 
        // Override point for customization after application launch.
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone"     bundle:nil];
            navigationController = [[UINavigationController alloc]         initWithRootViewController:_viewController];
        } else {
            self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad"     bundle:nil];
            navigationController = [[UINavigationController alloc] initWithRootViewController:_viewController];
        }
        self.window.rootViewController = navigationController;
        [self.window makeKeyAndVisible];
        return YES;
}
4

3 回答 3

2

你的代码看起来不错,所以 self.navigationController 一定是 nil。. . 您是否设置了导航控制器?

为了使您的代码正常工作,您当前的 UIViewController 需要包含在 UINavigationController 中。. . 您可以在应用程序委托中将 UINavigationController 设置为根视图控制器,如下所示:

{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UINavigationController* navigationController; 
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone"     bundle:nil];
    navigationController = [UINavigationController alloc]         initWithRootViewController:viewController];
    } else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad"     bundle:nil];
        navigationController = [UINavigationController alloc] initWithRootViewController:viewController];
    }
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

注意:你可以稍微清理一下上面的代码,但是你得到了图片,那就是你必须将根视图控制器设置为导航控制器,如下所示:

 self.window.rootViewController = navigationController;

如果你愿意,你也可以制作一个自定义的根视图控制器,但上面的内容可以让你实现你想要做的事情——UINavigationController 将用作整个应用程序的导航系统。

于 2013-04-25T05:58:49.167 回答
0

您的导航控制器为零。因此,将您的 didFinishLaunchingWithOptions 方法替换为

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:   (NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    UINavigationController *navcontroller = navigationController = [UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = navcontroller;
    [self.window makeKeyAndVisible];
    return YES;
}

现在您有一个导航控制器,因此对 self.navigationController 上的 push 方法的调用应该推送第二个控制器。

于 2013-04-25T06:11:20.537 回答
0

请试试

- (IBAction)Actionlogin:(id)sender {
     NSLog(@" login button has been pressed");
     NSLog(@"In init");
     test_details *aSecondPageController=[[test_details alloc]initWithNibName:@"test_details_iPhone" bunndle:nil];
    [self.navigationController pushViewController:aSecondPageController animated:NO];
  }

 // test_details_iPhone.xib and test_details_iPad.xib
 //Change initWithNibName@"test_details" with test_details_iPhone or test_details_iPad
于 2013-04-25T06:13:57.077 回答