2012-02-28 206 views
0

我遇到了SettingsViewController上沒有顯示的後退按鈕問題。當推送視圖時,導航欄顯示,但沒有後退按鈕。iPhone導航返回按鈕

我在一個視圖控制器裏面創建了這個,它不是一個導航控制器。對這裏實際發生的任何想法或建議。

- (void)viewDidLoad 
{ 
    self.title = @"Settings"; 
} 

- (IBAction)showSettingsModal:(id)sender 
{  
    SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; 
    UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:settingsViewController] autorelease]; 

    [self presentModalViewController:navController animated:YES]; 
    [settingsViewController release];  
} 

回答

3

您正在創建新的導航堆棧。您需要添加自己的「後退」按鈕並將其操作設置爲調用VC上的委託方法以解除它。

UPDATE: 似乎有很多的困惑在哪裏以及如何解僱ModalViewControllers。在大多數情況下,錯誤的做法是從Modal VC本身調用Dismiss方法,如果您希望父母在解僱時採取行動。相反,使用委派。下面是一個簡單的例子:

ModalViewController.h:

@protocol ModalViewControllerDelegate 
-(void)dismissMyModalVC; 
@end 


@interface ModalViewController : UIViewController { 
id <ModalViewControllerDelegate> delegate; 
} 

@property (nonatomic, retain) id <ModalViewControllerDelegate> delegate; 
// The rest of your class properties, methods here 

ModalViewController.m

@synthesize delegate; 

...

// Put in the Method you will be calling from that Back button you created 
[delegate dismissMyModalVC]; 

CallingViewController.h:

#import "ModalViewController.h" 

@interface CallingViewController : UIViewController 
<ModalViewControllerDelegate> 
// Rest of class here 

CallingViewController.m:

ModalViewController *mvc = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil]; 
mvc.delegate = self 
[self presentModalViewController:mvc animated:YES]; 

...

// The ModalViewController delegate method 
-(void)dismissMyModalVC { 
// Dismiss the ModalViewController that we instantiated earlier 
[self dismissModalViewControllerAnimated:YES]; 

這樣的VC被從實例化它的控制器正確關閉。該委託方法可以修改通過沿對象以及

+0

我花了一些時間來實現,但這是正確的解決方案。 – Vikings 2012-04-28 21:19:37

0

您呈現新的控制器,模式視圖控制器(當您完成登錄用戶,等等等等)。 Modal控制器呈現其最高級。你應該:

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

推視圖控制器到堆棧中,然後你會看到後退按鈕。

閱讀呈現視圖控制器蘋果documenation: https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

編輯沒有看到調用視圖控制器不是導航控制器的一部分。在這種情況下,你將不得不手動創建後退按鈕,並將其設置爲左欄導航項目。

+0

調用VC不是導航控制器的一部分(請參閱OP) – 2012-02-28 14:03:16

+0

這不起作用。我不明白self.navigationController,因爲這發生在視圖不是一個導航控制器。 – Vikings 2012-02-28 14:09:12

+0

我更新了我的答案,對不起。 – Maggie 2012-02-28 14:09:48

1

SettingsViewController沒有後退按鈕,因爲它位於堆棧的底部。如果你想要一個按鈕來消除模態對話框,你將不得不自己添加它。

1

你可以試試這個

UIBarButtonItem * backButton = [[UIBarButtonItem alloc]initWithTitle:@"Back"style:UIBarButtonItemStylePlain target:self.navigationItem.backBarButtonItem action:@selector(dismissModalViewControllerAnimated:)]; 
+0

小心 - 您幾乎總是想要在呈現的VC類中調用委託方法來關閉模態VC,而不是在模態VC本身上調用dismissModalViewController。 – 2012-02-28 14:11:09

+0

@EJJay是對的,這最終導致我的應用程序出現問題 – Vikings 2012-04-28 21:18:41