Saya memiliki View Controller di mana nilai saya adalah 0 (label) dan ketika saya membuka View Controller itu dari yang lain ViewController
saya telah menetapkan viewDidAppear
untuk menetapkan nilai 20 pada label. Ini berfungsi dengan baik tetapi ketika saya menutup aplikasi saya dan lagi saya membuka aplikasi saya tetapi nilainya tidak berubah karena viewDidLoad
, viewDidAppear
dan viewWillAppear
tidak ada yang dipanggil. Bagaimana saya bisa menelepon ketika saya membuka aplikasi saya. Apakah saya harus melakukan sesuatu applicationDidBecomeActive
?
175
Jawaban:
Penasaran dengan urutan kejadian yang tepat, saya memasukkan aplikasi sebagai berikut: (@Zohaib, Anda dapat menggunakan kode NSNotificationCenter di bawah ini untuk menjawab pertanyaan Anda).
Saat peluncuran, hasilnya terlihat seperti ini:
Masukkan latar belakang lalu masukkan kembali latar depan:
sumber
Menggunakan Objective-C
Anda harus mendaftarkan
UIApplicationWillEnterForegroundNotification
di AndaViewController
'sviewDidLoad
metode dan setiap kali aplikasi kembali dari latar belakang Anda dapat melakukan apapun yang Anda ingin lakukan dalam metode terdaftar untuk pemberitahuan.ViewController
Ini viewWillAppear atau viewDidAppear tidak akan dipanggil ketika aplikasi datang kembali dari latar belakang ke latar.Jangan lupa untuk membatalkan registrasi notifikasi tempat Anda terdaftar.
Catatan jika Anda mendaftar
viewController
untuk AndaUIApplicationDidBecomeActiveNotification
maka metode Anda akan dipanggil setiap kali aplikasi Anda menjadi aktif, tidak disarankan untuk mendaftarviewController
untuk pemberitahuan ini.Menggunakan Swift
Untuk menambahkan pengamat Anda dapat menggunakan kode berikut
Untuk menghapus pengamat Anda dapat menggunakan fungsi deinit dari swift.
sumber
Versi Swift 3.0 ++
Di Anda
viewDidLoad
, daftar di pusat notifikasi untuk mendengarkan ini dibuka dari tindakan latar belakangKemudian tambahkan fungsi ini dan lakukan tindakan yang diperlukan
Terakhir, tambahkan fungsi ini untuk membersihkan pengamat pemberitahuan saat pengontrol tampilan Anda dihancurkan.
sumber
Cepat 4.2. Versi: kapan
Daftar dengan NotificationCenter
viewDidLoad
untuk diberi tahu ketika aplikasi kembali dari latar belakangMenerapkan metode yang harus dipanggil.
Anda dapat menghapus pengamat setelah
ViewController
dihancurkan. Ini hanya diperlukan di bawah iOS9 dan macOS 10.11sumber
Mintalah pengontrol tampilan Anda mendaftar untuk
UIApplicationWillEnterForegroundNotification
pemberitahuan dan bereaksi sesuai itu.sumber
viewDidLoad
@nsgulliver seperti yang disarankan. AndaviewDidAppear
juga akan menelepondoYourStuff
untuk mengatur label Anda dengan nilai yang diinginkan.Saya pikir mendaftar untuk UIApplicationWillEnterForegroundNotification berisiko karena Anda mungkin berakhir dengan lebih dari satu pengontrol bereaksi terhadap pemberitahuan itu. Tidak ada jaminan bahwa pengontrol ini masih terlihat saat pemberitahuan diterima.
Inilah yang saya lakukan: Saya memaksa panggilan viewDidAppear pada pengontrol aktif langsung dari delegasi App metode didBecomeActive:
Tambahkan kode di bawah ini ke
- (void)applicationDidBecomeActive:(UIApplication *)application
sumber
coba tambahkan ini di applicationDelegate applicationWillEnterForeground.
sumber
Sesuai dokumentasi Apple:
Deskripsi:
Memberitahu pengendali anak penampilannya akan berubah. Jika Anda menerapkan pengontrol wadah kustom, gunakan metode ini untuk memberi tahu anak bahwa pandangannya akan muncul atau menghilang . Jangan memanggil
viewWillAppear:
,viewWillDisappear:
,viewDidAppear:
, atauviewDidDisappear:
langsung .Deskripsi:
Memberitahu pengendali anak penampilannya telah berubah. Jika Anda menerapkan pengontrol wadah kustom, gunakan metode ini untuk memberi tahu anak bahwa transisi tampilan selesai.
Kode sampel:
Pertanyaan: Bagaimana saya memperbaikinya?
Jawab : Saya menemukan potongan baris ini dalam aplikasi. Baris ini membuat aplikasi saya tidak menerima pemberitahuan ViewWillAppear. Ketika saya berkomentar kalimat-kalimat ini bekerja dengan baik .
sumber