在 查看#1 中,我在故事板中设置了两个控件;一个是导航栏中的 UIBarButtonItem ,另一个是 UISegmentedController 。前者是自定义绘制的图像,两个项目的色调都设置为紫色(故事板属性检查器中设置的色调)。
通过各种操作,用户可以通过 查看#1 进入 查看#2 。如果在 查看#2 中未满足某个条件,则会向用户显示错误消息,并重定向回 查看#1 < / em> 点击&#34;确定&#34;。
if(i == [self.itemsAvailable count]){
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Oh no!"
message:@"Warning message text!"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alertView show];
break;
}
请注意,警报是在while
循环内触发的,因此break;
。然后,以下函数返回 查看#1
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == [alertView cancelButtonIndex]) {
// Jump back one screen
[self.navigationController popViewControllerAnimated:YES];
}
}
问题是,当我使用popViewControllerAnimated:YES
函数返回 View#1 时,前面提到的两个控件( UIBarButtonItem 和 UISegmentedController )的色调显示为灰色而不是所需的紫色。
选择不同的 UISegmentedController 值会返回适当的色调颜色,但我需要为 UIBarButtonItem保留 View#1 返回正确的紫色色调。
为什么色调颜色会发生变化,如何解决这个问题,以便在弹回 查看#1 时自动获得适当的色调颜色?< / p>
查看#1 具有以下viewWillAppear
功能
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// Unhide the nav bar (hidden on home screen)
[self.navigationController.navigationBar setHidden:NO];
[self setUserDefaults]; // Load the appropriate values and set in UISegmentedController
}
,其中
- (void) setUserDefaults {
// Set the defaults from the settings
int selectedValue;
selectedValue = (int)[self.userDefaults integerForKey:@"SomeValue"];
[self.defaultsSegment setSelectedSegmentIndex:selectedValue];
}
某些变量名称已被修改,某些代码已被省略,但这是重要的部分。我不相信该函数与错误的色调颜色有任何关系,因为 UIBarButtonItem 永远不会通过代码修改,并且显示与 UISegmentedController 相同的错误。 / p>
将行[self loadView];
添加到viewWillAppear
方法会修复 UISegmentedController 色调,但我还不知道如何修复 UIBarButtonItem 色彩问题。使用行[self.navigationController loadView];
会导致一大堆问题。
在{strong> UIAlertView
调用的方法中调用viewWillAppear
。如果我将方法调用移至 viewDidAppear
,则UIBarButtonItem
会保留其正确的色调。但是视图中的图形突然出现在视图加载完毕后 - 这是不雅观的。
答案 0 :(得分:2)
问题的原因是在视图加载完成之前调用了popViewControllerAnimated
。
就是这样......
在viewWillAppear
方法中,调用另一个检查条件的方法并决定是否弹出一个视图。整个过程发生在视图甚至完成加载之前,这就是问题出现的地方。
尝试将其放入 查看#2 ,然后从 查看#1 导航到:
- (void)viewWillAppear:(BOOL)animated{
{
[super viewWillAppear:animated];
[self.navigationController popViewControllerAnimated:YES];
}
代码编译得很好,但当您导航到 查看#2 时,您将获得以下日志:
"nested pop animation can result in corrupted navigation bar"
基本上这就是我在流行音乐后改变色调颜色时遇到的问题。方法popViewControllerAnimated
在代码中足够深,它没有被Xcode捕获,但到目前为止还没有产生一堆问题。
我做的解决方法如下:
@property (nonatomic) BOOL didFail;
FALSE
willViewAppear
willViewAppear
内)TRUE
viewDidAppear
内查看BOOL变量是否为true或
不。如果条件符合您的要求,则弹出一个视图。<强> CODE 强>:
.h文件
@property (nonatomic) BOOL didFail;
.m文件
- (void)viewWillAppear:(BOOL)animated{
{
[super viewWillAppear:animated];
self.didFail = FALSE;
[self methodCall];
}
- (void) methodCall
{
if(condition is met){
self.didFail = TRUE;
}
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if(self.didFail == TRUE){
//alert message
[self.navigationController popViewControllerAnimated:YES];
}
}
那就是这样做的。警报出现之前有一点暂停,但可以忽略不计。现在流行之后,一切都应该是它应有的!