Ios 设置视图控制器未解除

Ios 设置视图控制器未解除,ios,objective-c,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,我正在制作一个任务列表应用程序,它有两个简单的视图控制器。。。我在第一个(主屏幕)中嵌入了导航控制器,但是,当我点击我的自定义后退按钮时,下一个视图控制器(设置)并没有关闭。我是否必须将主视图控制器设置为根VC?然后使用poptrootviewcontroller方法?我一直在使用dismissViewControllerAnimated 设置查看控制器实现文件: // // AGSettingsViewController.m // QuickList3 // // Created by

我正在制作一个任务列表应用程序,它有两个简单的视图控制器。。。我在第一个(主屏幕)中嵌入了导航控制器,但是,当我点击我的自定义后退按钮时,下一个视图控制器(设置)并没有关闭。我是否必须将主视图控制器设置为根VC?然后使用
poptrootviewcontroller
方法?我一直在使用dismissViewControllerAnimated

设置查看控制器实现文件:

//
//  AGSettingsViewController.m
//  QuickList3
//
//  Created by Alex Gartenberg on 4/11/14.
//  Copyright (c) 2014 A.Gartenberg. All rights reserved.
//

#import "AGSettingsViewController.h"

@interface AGSettingsViewController ()
@property (weak, nonatomic) IBOutlet UILabel *backgroundTitleLabel;
@property (weak, nonatomic) IBOutlet UILabel *fontTitleLabel;
@property (weak, nonatomic) IBOutlet UILabel *settingsTitleLabel;

@property (nonatomic) BOOL fontColor;
@end

@implementation AGSettingsViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    //set title of view
    self.settingsTitleLabel.text = @"SETTINGS";

    // Determine background color
    if (!BACKGROUND)
    {
        self.settingsBackgroundImage.image = [UIImage imageNamed:@"blue.png"];
    }
    else
    {
        // Retrieve image wrapped in NSData
        NSData *imageData = [[NSUserDefaults standardUserDefaults] objectForKey:BACKGROUND];
        // Unwrap the image from NSData
        UIImage *savedBackground = [UIImage imageWithData:imageData];
        // Set image as new background
        self.settingsBackgroundImage.image = savedBackground;
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Back Button Method

- (IBAction)backButtonPressed:(UIButton *)sender
{
    [self didSaveSettings];
    NSLog(@"Back Button Pressed");
}

#pragma mark - NSUserDefaults Persistance

-(void)saveSettings
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    //Select current background
    UIImage *savedBackground = self.settingsBackgroundImage.image;

    //Wrap image in an NSData Object
    NSData *imageData = UIImageJPEGRepresentation(savedBackground, 100);
    //Save Data wrapped Image Object to NSUserDefaults
    [defaults setObject:imageData forKey:BACKGROUND];

    //Font Color Bool Saved
    [defaults setBool:self.fontColor forKey:FONT_COLOR];

    //Persist Data
    [defaults synchronize];
}

#pragma mark - AGSettingsViewController Save and Dismiss

-(void)didSaveSettings
{
    [self saveSettings];
    [self dismissViewControllerAnimated:YES completion:nil];
}

@end

是的,您不应该使用
dismissViewControllerAnimated:completion:
,因为它只会影响由其父视图以模式显示的视图控制器。 我同意这一点可能会更清楚,尽管这一行应该暗示这不可行(我的重点):

使用其模式转换样式取消最顶部视图

因此,要从
UINavigationController
的堆栈中删除俯视图控制器,必须使用

-(void)didSaveSettings
{
    [self saveSettings];
    [self.navigationController popViewControllerAnimated:YES];
}

好的,这可以移除视图控制器,但是,现在我的主视图控制器没有显示。我只是得到一个空白屏幕。这和赛格的准备有关吗?我必须为家庭VC实例化一个新的视图控制器吗?不,你不应该做任何特殊的事情。但是阅读您的问题,我不确定您是否正确设置了主屏幕控制器
UINavigationController
应该是主vc,并嵌入主屏幕视图控制器(通过使用
initWithRootViewController:
viewControllers
属性)。如果您使用的是故事板(但情况似乎并非如此),则更简单。@GuilliaumeAlgis您是否有任何链接,我可以在其中检查我是否正确设置了它,因为我没有使用
initwithRootViewController
viewController
属性。事实上,我在故事板上设置了一切,但我不确定出了什么问题。。您还可以使用“主详细信息”模板在Xcode中创建一个新项目,以便在情节提要中列出
UINavigationController
的引用。