Saya mencoba menambahkan UIPopoverView ke aplikasi Swift iOS 8 saya, tetapi saya tidak dapat mengakses properti PopoverContentSize, karena popover tidak muncul dalam bentuk yang benar. kode saya:
var popover: UIPopoverController? = nil
func addCategory() {
var newCategory = storyboard.instantiateViewControllerWithIdentifier("NewCategory") as UIViewController
var nav = UINavigationController(rootViewController: newCategory)
popover = UIPopoverController(contentViewController: nav)
popover!.setPopoverContentSize(CGSizeMake(550, 600), animated: true)
popover!.delegate = self
popover!.presentPopoverFromBarButtonItem(self.navigationItem.rightBarButtonItem, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)
}
keluaran:
Ketika saya melakukan hal yang sama melalui UIPopoverPresentationController, saya masih belum menyelesaikannya. ini kode saya:
func addCategory() {
var popoverContent = self.storyboard.instantiateViewControllerWithIdentifier("NewCategory") as UIViewController
var nav = UINavigationController(rootViewController: popoverContent)
nav.modalPresentationStyle = UIModalPresentationStyle.Popover
var popover = nav.popoverPresentationController as UIPopoverPresentationController
popover.delegate = self
popover.popoverContentSize = CGSizeMake(1000, 300)
popover.sourceView = self.view
popover.sourceRect = CGRectMake(100,100,0,0)
self.presentViewController(nav, animated: true, completion: nil)
}
Saya mendapatkan hasil yang sama persis.
Bagaimana cara menyesuaikan ukuran popover saya? Bantuan apa pun akan sangat dihargai!
Jawaban:
Oke, teman serumah melihatnya dan menemukan jawabannya:
Itu caranya.
Anda tidak lagi berbicara dengan popover itu sendiri, Anda berbicara dengan pengontrol tampilan di dalamnya untuk menyetel ukuran konten, dengan memanggil properti
preferredContentSize
sumber
Sebenarnya jauh lebih sederhana dari itu. Di storyboard, Anda harus membuat viewcontroller yang ingin digunakan sebagai popover dan membuat kelas viewcontroller seperti biasa. Buat segue seperti yang ditunjukkan di bawah ini dari objek yang ingin Anda buka popovernya, dalam hal ini
UIBarButton
bernama "Config".Dalam "ibu viewcontroller", implementasikan metode
UIPopoverPresentationControllerDelegate
dan delegasi:Ganti
prepareForSeque
metode seperti ini:Dan Anda sudah selesai. Dan sekarang Anda dapat memperlakukan tampilan popover seperti tampilan lainnya, yaitu. tambahkan bidang dan apa yang tidak! Dan Anda mendapatkan pengontrol konten dengan menggunakan
popoverPresentationController.presentedViewController
metode diUIPopoverPresentationController
.Juga di iPhone Anda harus menimpa
sumber
Saya menemukan contoh lengkap bagaimana membuat ini semua bekerja sehingga Anda selalu dapat menampilkan popover tidak peduli perangkat / orientasi https://github.com/frogcjn/AdaptivePopover_iOS8_Swift .
Kuncinya adalah mengimplementasikan UIAdaptivePresentationControllerDelegate
Kemudian perluas contoh di atas (dari Imagine Digital):
sumber
UIModalPresentationFullScreen
atauUIModalPresentationOverFullScreen
". Lebih lanjut, "Jika Anda tidak mengimplementasikan metode ini atau mengembalikan gaya apa pun selainUIModalPresentationFullScreen
atauUIModalPresentationOverFullScreen
, pengontrol presentasi menyesuaikan gaya presentasi keUIModalPresentationFullScreen
gaya."Swift 2.0
Yah, aku berhasil. Coba lihat. Membuat ViewController di StoryBoard. Terkait dengan kelas PopOverViewController.
Lihat ViewController:
Catatan: Metode func showPopover (base: UIView) harus ditempatkan sebelum ViewDidLoad. Semoga membantu!
sumber
showPopover(base: UIView)
metode harus ditempatkan sebelumnyaviewDidLoad()
?Di iOS9, UIPopoverController disusutkan. Jadi dapat menggunakan kode di bawah ini untuk versi Objective-C di atas iOS9.x,
sumber
Di sini saya Mengonversi Kode Swift "Joris416" ke Objective-c,
Ingatlah untuk MENAMBAHKAN
UIPopoverPresentationControllerDelegate, UIAdaptivePresentationControllerDelegate
sumber
Ini paling baik dijelaskan di blog iOS8 Day-by-Day
Singkatnya, setelah Anda menyetel modalPresentationStyle UIViewController ke .Popover, Anda bisa mendapatkan UIPopoverPresentationClass (kelas iOS8 baru) melalui properti popoverPresentationController pengontrol.
sumber
Saya membuat jawaban cepat versi Objective-C dari Imagine Digitals di atas. Saya rasa saya tidak melewatkan apa pun karena tampaknya berfungsi dalam pengujian awal, jika Anda melihat sesuatu, beri tahu saya, dan saya akan memperbaruinya
sumber
popover.sourceView = self.view;
dua sen saya untuk xcode 9.1 / swift 4.
dan bereksperimen dalam:
func adaptivePresentationStyle ...
atau: return .pageSheet .... dan seterusnya ..
sumber
Implementasikan UIAdaptivePresentationControllerDelegate di Viewcontroller Anda. Kemudian tambahkan:
sumber
Berikut ini adalah panduan yang cukup lengkap tentang cara mengkonfigurasi dan menampilkan popovers. https://www.appcoda.com/presentation-controllers-tutorial/
Singkatnya, implementasi yang layak (dengan beberapa pembaruan dari sintaks artikel asli untuk Swift 4.2 ), untuk kemudian dipanggil dari tempat lain, akan menjadi seperti berikut:
Banyak dari hal ini sudah tercakup dalam jawaban dari @mmc, tetapi artikel ini membantu menjelaskan beberapa elemen kode yang digunakan, dan juga menunjukkan bagaimana kode dapat diperluas.
Ini juga memberikan banyak detail tambahan tentang penggunaan delegasi untuk menangani gaya presentasi untuk iPhone vs. iPad, dan untuk memungkinkan penutupan popover jika ditampilkan dalam layar penuh. Sekali lagi, diperbarui untuk Swift 4.2 :
Semoga ini membantu.
sumber
Bagi yang ingin belajar!
Saya membuat proyek Open Source untuk mereka yang ingin belajar dan menggunakan tampilan Popover untuk tujuan lain. Anda dapat menemukan proyeknya di sini. https://github.com/tryWabbit/KTListPopup
sumber