2011-07-09 90 views
0

我對Objective-C和iPhone編程相當陌生,所以我很抱歉如果這是一個新手問題。我有一個簡單的應用程序需要從一個視圖到另一個視圖。第一個視圖是UIViewController。我在IB中設置了xib文件(即將一些按鈕拖到窗口上)並連接了所有按鈕(這些都可以工作)。然後我創建了另一個xib文件和類(也是一個UIViewController)並將它們連接起來。當在第一個視圖中按下按鈕時,我想加載第二個視圖。這是應該推動視圖的代碼:pushViewController不起作用

-(IBAction)createAccount:(id)sender{ 
    CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil]; 
    [self.navigationController pushViewController:acctView animated:YES]; 
    [acctView release]; 
} 

但是這沒有任何作用。當我在createAccount方法中打印語句時,會打印這些語句(我可以多次單擊該按鈕,並且它永遠不會崩潰),但acctView永遠不會被推送。當我打印出self.navigationController的值時,它返回null。它更奇怪,因爲如果我以模態方式呈現acctView,那麼它就可以工作。

-(IBAction)createAccount:(id)sender{ 
    CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil]; 
    [self presentModalViewController:acctView animated:YES]; 
    [acctView release]; 

}

這只是正常的,但我不希望有模式使用的視圖。我完全迷失在這裏。在過去的幾個小時裏,我遇到了很多關於使用UINavigationController做些事情的帖子,並將其與我的觀點掛鉤,但我該怎麼做?任何幫助是極大的讚賞!謝謝。

+0

你確定你有一個navigationController?試試NSLog(@「%@」,self.navigationController); –

+0

當我這樣做時,它會打印出self.navigationController爲空。 – ORL

回答

7

看來你還沒有爲你的應用程序創建一個UINavigationController。

最好的事情將從一個新的Xcode項目從頭開始,照顧選擇一個基於導航的應用程序。通過這種方式,您將獲得幾乎已經爲您設置的所有內容。

如果你不喜歡這種方法,你可以通過編程方式創建你的UINavigationController。 Here你找到了一個教程。

如果喜歡更直來了點說明,在這裏,他們是:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil]; 
    self.navigation = [[[UINavigationController alloc] initWithRootController:overviewViewController] autorelease]; 
    [overviewViewController release]; 

    [window addSubview:[navigation view]]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

因此self.navigation是你的appDelegate一個retain編輯屬性。

編輯:

這個答案是相當陳舊,因此更新:

  1. 如果使用ARC,你應該使用strong(與retain)財產,你就不需要autorelease;

  2. ,如果你定位到iOS> 4.0(也由上述點隱含的),你可以使用rootViewController財產UIWindow說:

    MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil]; 
    self.window.rootViewController = [[[UINavigationController alloc] initWithRootController:overviewViewController] autorelease]; 
    [overviewViewController release]; 
    
    [window addSubview:[self.window.rootViewController view]]; 
    [self.window makeKeyAndVisible]; 
    

    ,而不需要任何navigation財產。

+0

修好了!謝謝。 – ORL

+0

最佳答案「爲什麼我的pushViewController無法正常工作」類型問題我在Stack Overflow中見過多年。簡潔明瞭。謝謝塞爾吉奧。 –

+0

@全球遊牧民:謝謝你的讚賞! – sergio

相關問題