在视图 #1中,我有两个控件在storyboard中设置; 一个是导航栏中的UIBarButtonItem,另一个是UISegmentedController。前者是自定义绘制的图像,两个项目的色调都设置为紫色(在storyboard属性检查器中设置色调)。
通过各种操作,用户可以通过视图 #1进入到视图 #2。如果在视图 #2中不满足某些条件,用户将显示错误消息,并在单击“OK”后重定向回视图 #1。
请注意,警报在
事情是这样的,当我使用
选择不同的UISegmentedController值会带回适当的色调颜色,但我需要离开视图 #1才能使UIBarButtonItem恢复到正确的紫色色调。
为什么色调颜色会改变,如何解决这个问题,使它们在弹回View #1时自动具有适当的色调颜色呢?
注: View #1拥有以下
在哪里
一些变量名已被修改,部分代码已被省略,但这是重要的部分。我不认为该函数与错误的色调有任何关系,因为UIBarButtonItem从未通过代码进行修改,并且显示与UISegmentedController相同的错误。
通过各种操作,用户可以通过视图 #1进入到视图 #2。如果在视图 #2中不满足某些条件,用户将显示错误消息,并在单击“OK”后重定向回视图 #1。
相关代码:
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
函数返回到视图 #1时,之前提到的两个控件(UIBarButtonItem和UISegmentedController)的色调显示为灰色,而不是期望的紫色。选择不同的UISegmentedController值会带回适当的色调颜色,但我需要离开视图 #1才能使UIBarButtonItem恢复到正确的紫色色调。
为什么色调颜色会改变,如何解决这个问题,使它们在弹回View #1时自动具有适当的色调颜色呢?
注: View #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相同的错误。
编辑#1:
在viewWillAppear
方法中添加[self loadView];
一行可以修复UISegmentedController色调问题,但我还无法解决UIBarButtonItem色调问题。使用[self.navigationController loadView];
会导致一系列问题。
编辑#2:
UIAlertView
在一个方法中被调用,该方法本身从viewWillAppear
调用。如果我将该方法调用移到viewDidAppear
,那么UIBarButtonItem
将保留其正确的色调。但是,视图中的图形突然出现在视图加载完成后,这是不美观的。