Saya membuat kerangka kerja yang dapat digunakan kembali untuk menampilkan pemberitahuan dalam aplikasi iOS. Saya ingin tampilan notifikasi ditambahkan di atas segalanya dalam aplikasi, semacam UIAlertView. Ketika saya memulai manajer yang mendengarkan acara NSNotification dan menambahkan tampilan sebagai tanggapan, saya perlu mendapatkan referensi ke tampilan paling atas dalam aplikasi. Inilah yang saya miliki saat ini:
_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Apakah ini akan berfungsi untuk aplikasi iOS apa pun atau apakah ini cara yang lebih aman / lebih baik untuk mendapatkan tampilan teratas?
sumber
(null)
di aplikasi iOS-8 saya (masalah papan cerita?) Ada petunjuk? Terima kasih! (Catatan:(null)
dikembalikan padaviewDidLoad
danviewWillAppear:
waktu.viewDidAppear:
Sudah terlambat.Masalahnya ada dua: Jendela atas, tampilan atas di jendela atas.
Semua jawaban yang ada melewatkan bagian jendela atas. Tapi
[[UIApplication sharedApplication] keyWindow]
tidak dijamin akan menjadi jendela atas.Jendela atas. Sangat tidak mungkin bahwa akan ada dua jendela dengan aplikasi yang
windowLevel
berdampingan sama , jadi kita dapat mengurutkan semua jendelawindowLevel
dan mendapatkan yang paling atas.Tampilan atas di jendela atas. Sekadar melengkapi. Seperti yang telah ditunjukkan dalam pertanyaan:
sumber
topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Sebenarnya mungkin ada lebih dari satu UIWindow di aplikasi Anda. Misalnya, jika keyboard ada di layar, maka
[[UIApplication sharedApplication] windows]
akan berisi setidaknya dua jendela (jendela kunci dan jendela keyboard Anda).Jadi jika Anda ingin tampilan Anda muncul di atas keduanya maka Anda harus melakukan sesuatu seperti:
(Dengan asumsi lastObject berisi jendela dengan prioritas windowLevel tertinggi).
sumber
Saya berpegang pada pertanyaan seperti yang dinyatakan judul dan bukan pembahasannya. Tampilan mana yang paling terlihat pada titik tertentu?
Dapat digunakan langsung dengan UIWindow apa pun sebagai penerima atau UIView apa pun sebagai penerima.
sumber
Jika Anda menambahkan tampilan pemuatan (misalnya, tampilan indikator aktivitas), pastikan Anda memiliki objek kelas UIWindow. Jika Anda memperlihatkan lembar tindakan tepat sebelum Anda memperlihatkan tampilan pemuatan Anda, itu
keyWindow
akan menjadiUIActionSheet
dan tidakUIWindow
. Dan karena lembar tindakan akan hilang, tampilan pemuatan juga akan hilang. Atau itulah yang menyebabkan masalah bagi saya.sumber
Jika aplikasi Anda hanya bekerja dalam orientasi potret, ini sudah cukup:
Dan tampilan Anda tidak akan ditampilkan di atas keyboard dan bilah status.
Jika Anda ingin mendapatkan tampilan teratas yang melewati keyboard atau bilah status, atau Anda ingin tampilan paling atas dapat berputar dengan benar dengan perangkat, silakan coba kerangka kerja ini:
https://github.com/HarrisonXi/TopmostView
Ini mendukung iOS7 / 8/9.
sumber
Cukup gunakan kode ini jika Anda ingin menambahkan tampilan di atas semua yang ada di layar.
sumber
coba ini
sumber
sumber