2017-07-29 93 views
1

我的應用程序是圍繞一個的UITabBarController和第一視圖控制器中我試圖呈現一個內置內VC從呈現視圖控制器「設置視圖」的用戶,但出於某種原因,如果這個設置視圖被呈現超過一旦所有按鈕停止運行並且應用程序徹底崩潰。麻煩內UITabViewController

在FirstViewController.m我:

- (IBAction)showSettings:(id)sender 
{ 
    UIViewController *settingsView = [self.storyboard instantiateViewControllerWithIdentifier:@"SettingsViewController"]; 

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:settingsView]; 
    [self.navigationController presentViewController:nav animated:YES completion:nil]; 
} 

其連接到一個UIButton標有 「設置」。

在SettingsViewController.m我:

- (IBAction)done 
{ 
    NSLog(@"DONE"); 

    [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
} 

其連接到一個UIButton標有「做」在SettingsViewController的左上角。

我第一次按「設置」,然後「完成」它沒有問題,但如果我再次按下「設置」按鈕,「完成」按鈕完全失去功能(完全不可點擊),用戶被迫重新啓動應用程序才能繼續使用它。

我的控制檯打印此當應用程序加載時,我相信概括了問題:

Unbalanced calls to begin/end appearance transitions for 
<UITabBarController: 0x7f97f5f1e780> 

但是,如果我嘗試讓「TabBarController」的實例,目前認爲這樣,我只是得到一個錯誤,我試圖提出一個不在層次結構中的VC ...

我只是不確定在UITabBarController中呈現/關閉視圖控制器的適當方式是什麼,但不是我的應用程序缺少基本功能。我不明白爲什麼FirstViewController不能正常顯示視圖。

任何幫助是極大的讚賞,這是一個非常惱人的錯誤,我不能夠在網上找到一個可行的解決方案其他地方。讓我知道我是否應該提供更多的信息/代碼

編輯:到的UITabBarController

改變錯字UITabViewController
+0

小點:有一個UITabViewController沒有這樣的事情。 – matt

+0

你說'self.navigationController'很奇怪。您尚未在視圖控制器層次結構中解釋此導航控制器的位置。 – matt

+0

有沒有理由試圖用'SettingsViewController'來演示和解除'UINavigationController'? –

回答

0

看來你設定的辭退導航控制器,而不是設置視圖控制器。嘗試使用self.dismiss代替self.navigationcontroller.dismiss

+0

我試過這個,當我看到你的答案時再試一次。它不會改變功能,我描述的問題依然存在。 – Tanner

1

的我不明白爲什麼你實例化一個導航控制器。 只需模態顯示。它應該工作。 你需要一個「回去」的外觀和感覺?

如果你已經在你的層次,你可以把設置的導航控制器。

反正:當你這樣做:

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:settingsView]; 
[self.navigationController presentViewController:nav animated:YES completion:nil]; 

在第一線,你在第二個創建一個局部變量 您使用的自我。 self.navigationController

1)誰擁有 「導航」?

2)如果你已經有了一個導航控制器(如self.navigationController顯示..或者是NIL?)爲什麼要使用「導航」?

+0

對不起,如果這是粗魯的,但你的答覆誠實不是我的問題的答案。這是一條評論。 Self.navigation不是零。我已經在另一個評論中說過這一點,但如果我不使用* nav並調用'[self presentViewController:settingsView animated:YES completion:nil];'我得到錯誤'應用程序嘗試以模態方式呈現活動控制器。如果你對我如何能夠改變我的代碼有一個想法,那麼我就會全神貫注。回答你的第一個問題,是的,我需要一個「回頭」的外觀和感覺。你是什​​麼意思「簡單地顯示模態」?不是我在做什麼? – Tanner

0

你定義根視圖控制器導航push和pop兩個

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) UINavigationController *navController; 

self.navController = [[UINavigationController alloc] initWithRootViewController: objcReg]; 
self.navController.navigationBarHidden =YES; 

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ; 
self.window.rootViewController = self.navController; 
[self.window makeKeyAndVisible]; 

//[self.navigationController presentViewController:objectofViewCantroller animated:YES completion:NULL]; 
//[self.navigationController popViewControllerAnimated:YES]; 
+0

獲取錯誤'應用程序試圖以模態方式呈現主動控制器「,但我對一些事情感到困惑。首先,我是否正確地將第一個和最後兩行代碼放在ViewDidLoad for FirstViewController中?什麼是objcReg?它應該是FirstViewController嗎?也混淆了爲什麼最後兩行被註釋掉。謝謝! – Tanner

+0

最後2行是評論哪個你想彈出或推動你可以取消註釋該行並使用它。 objcReg是控制器對象,您想要在我的答案中解釋帽子時,可以按下或彈出對話框 – AmitTiwari