Saya memiliki aplikasi tab bar, dengan banyak tampilan. Apakah ada cara untuk mengetahui apakah suatu UIViewController
saat ini terlihat dari dalam UIViewController
? (mencari properti)
ios
uiview
uiviewcontroller
uiwindow
Rob Bonner
sumber
sumber
Jawaban:
Properti jendela tampilan adalah nihil jika tampilan saat ini terlihat, jadi periksa tampilan utama di pengontrol tampilan:
Menjalankan metode tampilan menyebabkan tampilan memuat (jika tidak dimuat) yang tidak perlu dan mungkin tidak diinginkan. Akan lebih baik untuk memeriksa dulu untuk melihat apakah sudah dimuat. Saya telah menambahkan panggilan ke isViewLoaded untuk menghindari masalah ini.
Sejak iOS9 menjadi lebih mudah:
Atau jika Anda memiliki UINavigationController yang mengelola pengontrol tampilan, Anda dapat memeriksa properti visibleViewControllernya .
sumber
topViewController
.Inilah solusi @ progrmr sebagai
UIViewController
kategori:sumber
Ada beberapa masalah dengan solusi di atas. Jika Anda menggunakan, misalnya, a
UISplitViewController
, tampilan master akan selalu benar untukSebagai gantinya, ambil pendekatan sederhana ini yang tampaknya bekerja dengan baik di sebagian besar, jika tidak semua kasus:
sumber
Bagi Anda yang mencari versi Swift 2.2 dari jawabannya:
dan Swift 3 :
sumber
Untuk presentasi moda over-layar penuh atau over-konteks, "terlihat" bisa berarti itu di atas tumpukan pengontrol tampilan atau hanya terlihat tetapi ditutupi oleh pengontrol tampilan lain.
Untuk memeriksa apakah pengontrol tampilan "adalah pengontrol tampilan atas" sangat berbeda dari "terlihat", Anda harus memeriksa tumpukan pengendali tampilan pengendali navigasi pengendali view controller.
Saya menulis sepotong kode untuk mengatasi masalah ini:
sumber
isViewLoaded
adalah properti sejak Swift 3.0.Anda ingin menggunakan properti
UITabBarController
'sselectedViewController
. Semua pengontrol tampilan yang terlampir pada pengontrol bilah tab memilikitabBarController
properti yang diatur, jadi Anda bisa, dari dalam kode pengontrol tampilan apa pun:sumber
((UINavigationController *)self.tabBarController.selectedViewController).visibleViewController
Saya membuat ekstensi cepat berdasarkan jawaban @ progrmr.
Ini memungkinkan Anda untuk dengan mudah memeriksa apakah
UIViewController
ada di layar seperti:Ekstensi:
sumber
Untuk tujuan saya, dalam konteks pengontrol tampilan wadah, saya telah menemukan itu
bekerja dengan baik.
sumber
jika Anda menggunakan UINavigationController dan juga ingin menangani tampilan modal, berikut ini yang saya gunakan:
sumber
Pendekatan yang saya gunakan untuk modal yang disajikan view controller adalah untuk memeriksa kelas controller yang disajikan. Jika controller tampilan yang disajikan adalah
ViewController2
maka saya akan menjalankan beberapa kode.sumber
Saya menemukan fungsi tersebut di
UIViewController.h
.Mungkin fungsi di atas bisa mendeteksi
ViewController
muncul atau tidak.sumber
XCode 6.4, untuk iOS 8.4, ARC diaktifkan
Jelas banyak cara untuk melakukannya. Salah satu yang telah bekerja untuk saya adalah sebagai berikut ...
Ini dapat digunakan di pengontrol tampilan apa pun dengan cara berikut,
Jika Anda memanggil properti ini di dalam
-(void)viewDidLoad
Anda mendapatkan 0, maka jika Anda memanggil ini setelah-(void)viewDidAppear:(BOOL)animated
Anda mendapatkan 1.Semoga ini bisa membantu seseorang. Terima kasih! Bersulang.
sumber
Jika Anda menggunakan pengontrol navigasi dan hanya ingin tahu apakah Anda berada di pengontrol aktif dan teratas , maka gunakan:
Jawaban ini didasarkan pada komentar @mattdipasquale .
Jika Anda memiliki skenario yang lebih rumit, lihat jawaban lain di atas.
sumber
Anda dapat memeriksanya menurut
window
propertisumber
Saya memerlukan ini untuk memeriksa apakah view controller adalah controller yang dilihat saat ini, saya melakukannya dengan memeriksa apakah ada controller tampilan yang disajikan atau didorong melalui navigator, saya mempostingnya jika ada yang membutuhkan solusi seperti itu:
sumber
Saya menggunakan ekstensi kecil ini di Swift 5 , yang membuatnya sederhana dan mudah untuk memeriksa objek apa pun yang merupakan anggota UIView .
Kemudian, saya hanya menggunakannya sebagai pernyataan ...
Saya harap ini membantu! :)
sumber