47

ポップオーバーから UIActionSheet を表示しようとしているときに、このメッセージが表示される人はいますか?

アプリケーションは、スタイル UIAlertControllerStyleActionSheet の UIAlertController () を提示しました。このスタイルを持つ UIAlertController の modalPresentationStyle は UIModalPresentationPopover です。アラート コントローラの popoverPresentationController を介して、このポップオーバーの位置情報を提供する必要があります。sourceView と sourceRect、または barButtonItem のいずれかを提供する必要があります。アラート コントローラを提示するときにこの情報が不明な場合は、UIPopoverPresentationControllerDelegate メソッド -prepareForPopoverPresentation で提供できます。

GM の前に、UIActionSheet を UIAlertController に変換するためのいくつかの回避策を使用しましたが、これは正常に機能しています。ただし、Apple は UIActionSheet の問題を解決しようとしたようで、回避策を使用したくありませんでしたが、選択の余地がないようです...

4

6 に答える 6

11

ユーザーが 内のセルで選択を行った後にアクション シートを提示している場合UITableView。これがうまく機能することがわかりました:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Directions" 
                                                               message:@"Select mode of transportation:"
                                                        preferredStyle:UIAlertControllerStyleActionSheet];
alert.popoverPresentationController.sourceView = cell;
alert.popoverPresentationController.sourceRect = cell.bounds;
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
//...
[self presentViewController:alert animated:YES completion:nil];
于 2015-12-06T17:54:10.390 に答える
2

実際のところ、Xcode for iPhone および iPad の設計にはバグがあると思います (私は信じています)。

  1. iPhone では同じコードが完璧に機能し、(常に) 同じ位置にアラート メッセージが表示されます。ただし、iPad の場合、アラート ボックスの位置を定義する必要がありますalert.popoverPresentationController.sourceView = self.view; alert.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width / 2.0 - 105, self.view.bounds.size.height / 2.0 + 70, 1.0, 1.0);。105 と 70 は、アンカー ポイントが異なるため、iPad の縦向きデザインのおおよその寸法の違いです。
  2. iPhone のデザインUIAlertControllerには「モーダル ビュー」が付属していますが、残念ながら iPad で同じコードを使用すると「モーダル ビュー」にはなりません。つまり、iPad のデザインでタッチを無効にするには、追加のコードを記述する必要があります。変だと思います。
  3. iPad の設計では、アンカー ポイントが異なることを考慮する必要があります。AlertView の左上ではなく、バブル トライアングル ポイントです。

これらは私が見る奇妙なものです。私は標準がなければならないと思います。もし誰かが標準から外に出たいのなら、それでいいのですが、他の選択肢があるかもしれません。

于 2015-12-24T15:57:07.087 に答える