Di aplikasi saya, saya menggunakan pengontrol navigasi. Kemudian dalam beberapa tampilan saya menggunakan presentViewController
untuk menampilkan gambar yang diperbesar. Juga saya tidak menggunakan Storyboard atau nib.
Saya mendapatkan kesalahan ini hanya di iOS 7. Ini berfungsi dengan baik di iOS 6 dan sebelumnya:
Menyajikan pengontrol tampilan pada pengontrol tampilan terpisah tidak disarankan
Jawaban:
Untuk menghindari peringatan dalam navigasi push, Anda dapat langsung menggunakan:
Dan kemudian di pengontrol tampilan modal Anda, ketika semuanya sudah selesai, Anda bisa memanggil:
[self dismissViewControllerAnimated:YES completion:nil];
sumber
self.navigationController
melakukannya untuk saya.Alasan peringatan ini adalah saya menghadirkan pengendali tampilan atas tampilan kecil yang bukan tampilan ukuran penuh. Diberikan di bawah ini adalah gambar proyek saya. di mana di klik pada empat opsi di atas. Navigasi pengguna ke tampilan childviewcontroller yang berbeda. (Berfungsi seperti tabViewcontroller). Tetapi childviewcontroller berisi tampilan ukuran kecil. Jadi, jika kami menyajikan pandangan dari childviewcontroller itu memberikan peringatan ini.
Dan untuk menghindari ini, Anda bisa menyajikan pandangan tentang orangtua childviewcontroller
sumber
Tunggu
viewDidAppear()
:Kesalahan ini juga dapat muncul jika Anda mencoba menghadirkan pengontrol tampilan sebelum tampilan benar-benar muncul, misalnya menyajikan tampilan di
viewWillAppear()
atau sebelumnya. Cobalah untuk menyajikan tampilan lain setelahviewDidAppear()
atau di dalamnya.sumber
viewDidLoad()
, orang! Saya telah membuat kesalahan ini berkali-kali ...Dalam kasus saya, saya memiliki
sampleViewController
pandangan yang ditambahkan sebagai subview, kemudian mencoba menyajikan popover dari tampilansampleViewController
(di siniself
sebagaiUIViewController
contoh):Cara yang benar harus di bawah ini:
Btw, ini juga berfungsi untuk case yang menampilkan popover dari sel tableview, Anda hanya perlu memastikan bahwa pengontrol tableview telah ditambahkan sebagai pengontrol tampilan anak.
sumber
[self addChildViewController:sampleViewController];
, sekarang saya menambahkan ini, terima kasihSaya pikir masalahnya adalah bahwa Anda tidak memiliki hierarki pengendali tampilan yang tepat. Atur rootviewcontroller aplikasi dan kemudian tampilkan tampilan baru dengan mendorong atau menghadirkan pengontrol tampilan baru pada aplikasi tersebut. Biarkan setiap pengontrol tampilan mengelola tampilan mereka. Hanya pengontrol tampilan wadah, seperti tabbarviewcontroller, yang harus menambahkan tampilan pengontrol tampilan lain ke tampilan mereka sendiri. Baca panduan pemrograman view controller untuk mempelajari lebih lanjut tentang cara menggunakan view controller dengan benar. https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/
sumber
Cepat 3
Bagi siapa pun yang tersandung pada ini, inilah jawaban cepatnya.
sumber
Saya memiliki masalah yang hampir sama. Alasannya adalah bahwa saya mencoba untuk menyajikan "beberapa" controller pada yang lain dan setelah animasi selesai saya menetapkan controller yang disajikan sebagai root. Setelah operasi ini, semua pengontrol lebih lanjut yang hadir membawa saya ke peringatan: " Menampilkan pengontrol tampilan pada pengontrol tampilan terpisah tidak disarankan ". Dan saya memecahkan peringatan ini hanya pengaturan "beberapa" controller sebagai root tanpa presentasi di awal.
Dihapus:
Jadikan sebagai root tanpa presentasi:
sumber
Salah satu solusi untuk ini adalah jika Anda memiliki childviewcontroller Jadi Anda cukup menampilkan viewviewcontroller pada induknya
Dan untuk pemberhentian menggunakan pengontrol disissview yang sama.
Ini solusi sempurna bekerja untuk saya.
sumber
Gunakan
[self.navigationController presentViewController:xxx animated:YES completion:nil]
di iOS 8.sumber
Coba kode ini
sumber
Coba sajikan
TabBarController
jika ini adalahTabBarController
aplikasi berbasis.Alasan mungkin
self
adalah anak dariTabBarController
dan Anda mencoba untuk menyajikan dariChildViewController
.sumber
Ya, saya juga menghadapi pesan peringatan yang sama saat menampilkan pengontrol Peringatan yang berada di tampilan lain. Kemudian saya menghindari ini dengan menghadirkan pengontrol lansiran dari pengontrol tampilan induk seperti di bawah ini:
sumber
Anda perlu menambahkan pengontrol tampilan yang akan menampilkan pengontrol baru sebagai anak dari pengontrol tampilan induk.
Katakanlah Anda memilikiMainViewController Anda, lalu Anda menambahkan controller baru yang disebut controllerA, dan kemudian Anda ingin menyajikan controller baru yang disebut controllerB dari controllerA
Anda harus menulis sesuatu seperti ini:
dan di dalam controllerA Anda dapat menyajikan controller baru tanpa peringatan
sumber
Dalam Swift 4.1 dan Xcode 9.4.1
Solusinya adalah
Jika menulis seperti ini saya mendapatkan kesalahan yang sama
Saya mendapatkan kesalahan yang sama
Solusi lengkapnya adalah
sumber
Pastikan Anda memiliki pengontrol tampilan root untuk memulai. Anda dapat mengaturnya
didFinishLaunchingWithOptions
.sumber
Banyak alasan untuk peringatan ini. Milik saya karena saya memiliki segue yang terhubung dari ViewController ke yang lain yang akan disajikan secara digital. Tapi, ViewController yang saya tunjukkan sedang dihasilkan secara dinamis oleh PageViewController. Karena itulah ia terlepas di Storyboard. Aplikasi saya tidak akan macet karenanya; tapi saya ingin membungkam peringatan itu.
sumber
Saya sampai di utas ini di mana saya memiliki Custom Navigation Bar dan saya memanggil AlertViewController melaluinya.
Saya harus menambahkannya sebagai anak ke pengendali tampilan utama saya. Lalu aku bisa memanggilnya tanpa peringatan.
Anda harus menambahkan
Zoomed Image View Controller
sebagai anak dari ViewController utama.(misalnya)
Maka Anda akan dapat memanggil ZoomedImageViewController Anda
sumber
Banyak jawaban yang benar.
Masalah ini terjadi pada saya ketika rekan kerja saya menambahkan AViewController ke BViewController. Entah bagaimana, dia hanya menambahkan tampilan AViewController ke tampilan BViewController.
Diperbaiki dengan menambahkan bViewController.addChild (aViewController)
sumber
Itu tergantung jika Anda ingin menunjukkan peringatan Anda atau sesuatu yang serupa di mana saja dari jenis UIViewController.
Anda dapat menggunakan contoh kode ini:
sumber
Attempt to present <UIAlertController: 0x7fc01a1eb600> on <ViewController: 0x7fc019821e00> whose view is not in the window hierarchy!