Anda dapat menyajikan UIAlertController
dari popover dengan menggunakan UIPopoverPresentationController
.
Dalam Obj-C:
UIViewController *self; // code assumes you're in a view controller
UIButton *button; // the button you want to show the popup sheet from
UIAlertController *alertController;
UIAlertAction *destroyAction;
UIAlertAction *otherAction;
alertController = [UIAlertController alertControllerWithTitle:nil
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
destroyAction = [UIAlertAction actionWithTitle:@"Remove All Data"
style:UIAlertActionStyleDestructive
handler:^(UIAlertAction *action) {
// do destructive stuff here
}];
otherAction = [UIAlertAction actionWithTitle:@"Blah"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
// do something here
}];
// note: you can control the order buttons are shown, unlike UIActionSheet
[alertController addAction:destroyAction];
[alertController addAction:otherAction];
[alertController setModalPresentationStyle:UIModalPresentationPopover];
UIPopoverPresentationController *popPresenter = [alertController
popoverPresentationController];
popPresenter.sourceView = button;
popPresenter.sourceRect = button.bounds;
[self presentViewController:alertController animated:YES completion:nil];
Mengedit untuk Swift 4.2, meskipun ada banyak blog yang tersedia untuk hal yang sama tetapi mungkin menghemat waktu Anda untuk pergi dan mencari mereka.
if let popoverController = yourAlert.popoverPresentationController {
popoverController.sourceView = self.view //to set the source of your alert
popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) // you can set this as per your requirement.
popoverController.permittedArrowDirections = [] //to hide the arrow of any particular direction
}
Di iPad, peringatan akan ditampilkan sebagai sembulan menggunakan UIPopoverPresentationController yang baru , ia mengharuskan Anda menentukan titik jangkar untuk penyajian sembulan dengan menggunakan sourceView dan sourceRect atau barButtonItem
Untuk menentukan titik jangkar, Anda harus mendapatkan referensi ke UIPopoverPresentationController UIAlertController's dan mengatur salah satu properti sebagai berikut:
Kode sampel:
sumber
Di Swift 2, Anda ingin melakukan sesuatu seperti ini untuk menunjukkannya dengan benar di iPhone dan iPad:
Jika Anda tidak mengatur presenter, Anda akan berakhir dengan pengecualian pada iPad
-[UIPopoverPresentationController presentationTransitionWillBegin]
dengan pesan berikut:sumber
Pembaruan untuk Swift 3.0 dan lebih tinggi
sumber
Pembaruan 2018
Saya baru saja menolak aplikasi karena alasan ini dan resolusi yang sangat cepat adalah hanya mengubah dari menggunakan lembar tindakan ke peringatan.
Bekerja dengan baik dan melewati penguji App Store dengan baik.
Mungkin bukan jawaban yang cocok untuk semua orang tetapi saya harap ini membantu beberapa dari Anda keluar dari acar dengan cepat.
sumber
Cepat 4 dan lebih tinggi
Saya telah membuat ekstensi
Cara Penggunaan:
sumber
Inilah solusi cepat:
sumber
Cepat 5
Saya menggunakan gaya "actionsheet" untuk iPhone dan "waspada" untuk iPad. iPad ditampilkan di tengah layar. Tidak perlu menentukan sourceView atau jangkar tampilan di mana saja.
Sunting: Per saran ShareToD, perbarui usang "UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad" centang
sumber
Bagi saya, saya hanya perlu menambahkan yang berikut:
sumber
Cukup tambahkan kode berikut sebelum menyajikan lembar tindakan Anda:
sumber