加载.xib文件并显示它

时间:2011-05-05 16:31:17

标签: iphone objective-c interface-builder nib

我正在尝试在按下按钮时在我的应用程序中显示“关于页面”,但是当我按下UIButton时,会调用NSLog(@“按下按钮”),但视图将不会加载。这是我的代码:

- (IBAction)pushAbout {
    NSLog(@"Button pressed");
    AboutView * aboutView = [[AboutView alloc] initWithNibName:@"AboutView" bundle:nil];
    [self.navigationController pushViewController:aboutView animated:YES];
    [aboutView release];
}

我在一个例子中看过这个代码,但它是在UITableViewController而不是ordianry UIView控制器中调用的。

类文件“AboutView”创建为UIViewController子类。他们被创造并保持原状

2 个答案:

答案 0 :(得分:2)

猜测:您的视图不在UINavigationController中,因此

self.navigationController

实际上是nil,没有任何反应。

解决方案是将主视图放在导航控制器中,并将导航控制器的视图添加到应用程序的主窗口。

一种简单的方法:

在您的app delegate中,更改

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions
(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UINavigationController* navController = [[UINavigationController alloc] 
        initWithRootViewController:self.viewController];

    self.window.rootViewController = navController;
    [self.window makeKeyAndVisible];
    return YES;
}

或类似的。请注意,这只是为了让您入门,也许不是最好的方式。 (我假设你刚刚在xcode中创建了一个基于视图的应用程序。)

答案 1 :(得分:1)

是的,你没有设置UINavigationController。

添加

NSLog(@"nav? %@", self.navigationController); 

到您的操作,您将看到它转储(null)。

但是,如果输入以下代码,AboutView.xib可以正常工作:

[self presentModalViewController:aboutView animated:YES];

而不是

[self.navigationController pushViewController:aboutView animated:YES];

视图将显示。在您压缩的示例中,AboutView.xib不包含标签,因此不要怀疑它是否是白页。

您可以使用

关闭显示的模态视图
[self dismissModalViewControllerAnimated:YES];
在你的AboutViewController中

为了开始使用UINavigationController,我建议使用基于导航的应用程序模板创建应用程序。

相关问题