iOS 6.1 (エミュレート) および 6.1.3 (物理デバイス) アプリケーションで実行される iOS では、次のコードを使用してビューから UIActionSheet を表示します。
UIActionSheet *actionCreateNewComment = [[UIActionSheet alloc] initWithTitle:CLocalised(@"EditExistingComment") delegate:self cancelButtonTitle:CLocalised(@"No") destructiveButtonTitle:nil otherButtonTitles: CLocalised(@"Yes"), nil];
[actionCreateNewComment setActionSheetStyle:UIActionSheetStyleBlackOpaque];
[actionCreateNewComment setTag:ActionSheetTagNewComment];
[actionCreateNewComment showFromToolbar:self.navigationController.toolbar];
[actionCreateNewComment release];
ビューはツールバーを次のように設定します。
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:control];
[self setToolbarItems:[NSArray arrayWithObject:item]];
はどこcontrol
にありますかUISegmentedControl
。
ボタン アクションを処理するコードは次のとおりです。
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
bool shouldAddNewComment = buttonIndex == [actionSheet cancelButtonIndex];
[self navigateToCommentScreen:shouldAddNewComment];
}
このアクション シートが表示されるたびに、ツールバーは「空白」になります。このビューだけでなく、他のビューも同様です。
ワークフローの例を次に示します。
UIActionSheet を使用せずに Instr から Comment に移動しても、それ以外は同じコードであれば、問題は発生しないことに注意してください。
ここでの問題は、"Instr" ビューでツールバーが空であることです。「リスト」に戻るためにさらに 2 つのビューをポップすると、そのツールバーも空になります。
次に、新しいフォームを割り当てて初期化し、それらをプッシュして WO と Instr に戻っても、ツールバーは空のままです。
「概要」ビューを表示する「リスト」ビューからの別のナビゲーション オプションがあります。データに応じて、このビューはツールバーのボタンの有無にかかわらず表示されます。
「Summary Button」と「Summary empty」はどちらも意図されたビューです。Inst と Comment の間を移動する前に UIActionSheet が表示された後、"Summary hidden" が表示されます。しかし、図で「Summary Empty」として表示されている「Summary」ビューに移動すると (データのために意図されたものです)、ツールバーはどこでも再び機能し始めます。または、少なくとも Instr ビューから UIActionSheet を再度表示するまでは。
私の意見では、これにはいくつかの奇妙な点があります。
- ツールバーが空のビューに移動すると、ツールバーが非表示になり、pic: "SummaryEmpty" を参照すると、ツールバーは他のビューで意図したとおりに表示されます。
- 同じコードを使用して、アプリケーションの他のビューで問題なくアクション シートを表示します。
- エミュレートされた iOS 5.1 またはエミュレートされた iOS 5.0 でアプリケーションを実行すると、問題は発生しません。
アクション シートを閉じるとき、またはそれを表示する方法について何かを見逃していませんか?
さらに詳しい情報が必要な場合はお知らせください。
更新: アクション シート ボタン イベントの後に強制的に呼び出し[self setToolbarItems:nil]
てから、以前と同じアイテムで更新すると、ツールバーが意図したとおりに表示されます。これは正しい方法とは思えません。
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
更新 2013-05-28: @LOP_Luke のおかげで、「コメント」ビューに移動せずに戻っただけで、ツールバーが再び機能し始めることがわかりました。clickedButtonAtIndex
では、まだコール スタックにあるときに別のビューに移動すると、何らかの問題が発生する可能性がありますか?
Update 2013-05-29 : メソッドを追加すると:
-(void)commentScreenYes{
[self vanigateToCommentScreen:YES];
}
ボタンのコードを次のように変更します。
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
bool shouldAddNewComment = buttonIndex == [actionSheet cancelButtonIndex];
if(shouldAddNewComment){
[self performSelectorOnMainThread:@selector(commentScreenYes) withObject:nil waitUntilDone:NO];
return;
}
[self navigateToCommentScreen:shouldAddNewComment];
}
次に、キャンセルボタンでは機能しますが、はいボタンでは機能しません。キャンセル ボタンは、[はい] ボタンによって「中断」された後も、ツールバーを再び機能させます。(新しいメソッドを追加して) このフローを介して両方のボタンをパイプすると、両方とも機能します。それでも、iOS 5.1 で実行すると、どのフローを選択しても動作します。