在View #1中,我在情节提要中设置了两个控件;一个是导航栏中的UIBarButtonItem,另一个是UISegmentedController。前者是自定义绘制的图像,并且两个项目的色调都设置为紫色(在情节提要属性检查器中设置的色调)。
通过各种操作,用户可以通过View #1到达View #2。如果在View #2中不满足某个条件,则会向用户显示一条错误消息,并在单击“OK”时重定向回View #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;
. 然后下面的函数返回到View #1
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == [alertView cancelButtonIndex]) {
// Jump back one screen
[self.navigationController popViewControllerAnimated:YES];
}
}
问题是,当我使用该函数返回View #1popViewControllerAnimated:YES
时,前面提到的两个控件(UIBarButtonItem和UISegmentedController)的色调显示为灰色而不是所需的紫色。
选择不同的UISegmentedController值会恢复适当的色调颜色,但我需要保留View #1以使UIBarButtonItem返回正确的紫色色调。
色调颜色是如何变化的,我该如何解决这个问题,以便它们在弹回View #1时自动具有适当的色调颜色?
笔记:
视图 #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:
将该行添加[self loadView];
到该viewWillAppear
方法可修复UISegmentedController色调颜色,但我尚不知道如何修复UIBarButtonItem色调问题。使用这条线[self.navigationController loadView];
会导致一大堆问题。
编辑#2:
是在一个方法中调用的,该UIAlertView
方法本身是从 调用的viewWillAppear
。如果我将方法调用移动到,viewDidAppear
则UIBarButtonItem
保留其正确的色调颜色。但是,在视图完成加载后,视图中的图形突然出现——这很难看。