3

このコードはiPhoneでは正常に機能しますが、iPadではアクションシートが画面の中央に表示されます。トリガーボタンがあるコーナーではありません。また、キャンセルボタンは表示されません。

また、アプリはランドスケープモードのみです。カメラトリガーボタンは画面の右上隅にあります。

mediaPicker = [[UIImagePickerController alloc] init];
mediaPicker.allowsEditing = YES;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                             delegate:self
                                                    cancelButtonTitle:@"Cancel"
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:@"Take photo", @"Choose Existing", nil];
    //[actionSheet showInView:self.view];
    [actionSheet showInView:self.navigationController.view];
}
// If device doesn't has a camera, Only "Choose Existing" and "Cancel" options will show up.
else {
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                             delegate:self
                                                    cancelButtonTitle:@"Cancel"
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:@"Choose Existing", nil];
    [actionSheet showInView:self.view];
}

ボタンの場所を表示するためのアクションシートが必要です。どうすればいいですか。

4

2 に答える 2

8

actionsheetsIPAD にはとそのキャンセル ボタンに関するいくつかの特別な規則があります。通常は、送信元を表示する場所によってactionsheets異なります。

UIToolbarUITabBarUIBarButtonItem、または からアクション シートを表示できますUIView。このクラスは、アクション シートの表示方法を決定する際に、開始ビューと現在のプラットフォームを考慮します。iPhone および iPod touch デバイスで実行されているアプリケーションの場合、アクション シートは通常、ビューを所有するウィンドウの下部から上にスライドします。iPad デバイスで実行されているアプリケーションの場合、アクション シートは通常、適切な方法で開始ビューに固定されたポップオーバーに表示されます。ポップオーバーの外側をタップすると、カスタム ボタン内をタップした場合と同様に、アクション シートが自動的に閉じます。プログラムで閉じることもできます。

iPad でアクション シートを表示する場合、キャンセル ボタンを含めない方がよい場合があります。アクション シートのみを提示している場合、システムはアニメーションを使用せずにポップオーバー内にアクション シートを表示します。ポップオーバーの外側をタップすると、アイテムを選択せず​​にアクション シートが閉じられるため、デフォルトでシートがキャンセルされます。したがって、キャンセル ボタンを含めることは混乱を招くだけです。ただし、既存のポップオーバーがあり、アニメーションを使用して他のコンテンツの上にアクション シートを表示している場合は、キャンセル ボタンが適切です。

showInViewこれらの方法のいずれかから使用してみてください

[actionSheet showFromBarButtonItem:barItem animated:YES];

解説はこちらこちら

于 2013-02-26T20:35:20.630 に答える
2

iPad では、 を使用しないでくださいshowInView:。代わりに、 など、アクション シートを表示するためのより具体的な方法のいずれかを使用しshowFromBarButtonItem:animated:ます。

nsgulliver の回答に記載されているように、iPad でアクション シートに [キャンセル] ボタンが表示されないのは正常です。ユーザーが行う必要があるのは、アクション シートの外側をタップすることだけです。キャンセル扱いとなります。

于 2013-02-26T20:41:52.117 に答える