ビュー #1 には、ストーリーボードに設定された 2 つのコントロールがあります。1 つはナビゲーション バーのUIBarButtonItemで、もう 1 つはUISegmentedControllerです。前者はカスタム描画されたイメージで、両方のアイテムの色合いが紫色に設定されています (ストーリーボード属性インスペクターで設定された色合い)。
さまざまなアクションを通じて、ユーザーはView #1を介してView #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];
}
}
関数を使用してビュー #1 に戻ると、popViewControllerAnimated:YES
前述の 2 つのコントロール ( UIBarButtonItemとUISegmentedController ) の色合いが希望の紫ではなく灰色で表示されます。
別のUISegmentedController値を選択すると、適切な色合いに戻りますが、UIBarButtonItemが適切な紫色に戻るには、ビュー #1 を残す必要があります。
ビュー #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];
を追加すると、 UISegmentedControllerの色合いが修正されますが、 UIBarButtonItemの色合いの問題を修正する方法はまだわかりません。ラインを使用すると、問題が発生します。viewWillAppear
[self.navigationController loadView];
編集#2:
はUIAlertView
、それ自体が から呼び出されるメソッド内で呼び出されviewWillAppear
ます。メソッド呼び出しを移動すると、適切な色合いが保持viewDidAppear
されます。UIBarButtonItem
しかし、ビューの読み込みが完了した後、ビュー内のグラフィックが突然表示されます。これは見苦しいものです。