在UITabViewController

时间:2017-07-29 01:27:36

标签: ios objective-c cocoa-touch uitabbarcontroller

我的应用程序是围绕UITabBarController构建的,并且在第一个View Controller中我试图为用户呈现“设置视图”但由于某种原因,如果此设置视图多次出现,则所有按钮都停止运行且应用程序出现问题完全放下

在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];   
 }

附加到SettingsViewController左上角标有“done”的UIButton。

我第一次按“设置”然后“完成”它没有问题但是如果我再次按下“设置”按钮,“完成”按钮完全失去功能(完全不可点击)并且用户被迫重启该应用程序,以继续使用它。

我的控制台在加载应用程序时会打印出来,我相信这会解决问题:

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

但是如果我尝试创建一个“TabBarController”的实例并以这种方式呈现视图我只是得到一个错误,我试图呈现一个不在层次结构内的VC ...

我只是不确定在UITabBarController中呈现/关闭视图控制器的适当方式是什么,但是从右到右我的应用程序缺少基本功能。我不明白为什么FirstViewController不能正常呈现视图。

非常感谢任何帮助,这是一个非常烦人的Bug,我无法在其他任何地方找到可行的解决方案。如果我应该提供更多信息/代码,请告诉我们

编辑:将拼写错误的UITabViewController更改为UITabBarController

3 个答案:

答案 0 :(得分:1)

我不明白为什么要实例化Nav控制器。 只需显示模态。它应该工作。 你需要一种“回归”的外观和感觉吗?

如果您的层次结构中已有导航控制器,则可以推送设置。

无论如何

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

在第一行中创建一个LOCAL变量 在第二,你使用自我。 self.navigationController

1)谁拥有“nav”?

2)如果你已经有一个导航控制器(因为self.navigationController显示..或者是NIL?)为什么要使用“nav”?

答案 1 :(得分:0)

似乎您将疏忽设置为导航控制器而不是设置视图控制器。尝试使用self.dismiss而不是self.navigationcontroller.dismiss

答案 2 :(得分:0)

您可以定义用于导航的根视图控制器并弹出

@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];