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