Aplikasi saya membutuhkan hal-hal berikut untuk ditambahkan dalam lembar tindakan.
- UIToolbar
- Tombol di UIToolbar
- Kontrol UIPicker
Saya telah menyertakan gambar untuk memahami kebutuhan saya.
Bisakah Anda menjelaskan, bagaimana ini dapat diterapkan?
ios
iphone
uipickerview
actionsheetpicker
Sagar R. Kothari
sumber
sumber
Jawaban:
Pembaruan untuk iOS 7
Dokumen Apple untuk UIActionSheet :
UIActionSheet is not designed to be subclassed, nor should you add views to its hierarchy
Saya merekomendasikan untuk tidak mencoba menyesuaikan konten ActionSheet, karena dapat menyebabkan kesalahan konteks tidak valid yang serius di iOS 7. Saya hanya menghabiskan beberapa jam untuk mengatasi masalah ini dan akhirnya memutuskan untuk mengambil pendekatan yang berbeda. Saya mengganti panggilan untuk menampilkan lembar tindakan dengan pengontrol tampilan modal yang berisi tampilan tabel sederhana.
Ada banyak cara untuk melakukannya. Inilah salah satu cara yang baru saya terapkan dalam proyek saat ini. Sangat menyenangkan karena saya dapat menggunakannya kembali antara 5 atau 6 layar berbeda di mana saya semua pengguna dapat memilih dari daftar opsi.
SimpleTableViewController
,.SimpleTableViewControllerDelegate
dengan metode yang diperlukanitemSelectedatRow:
, dan properti lemah yang disebut delegate of typeid<SimpleTableViewControllerDelegate>
. Ini adalah bagaimana kita akan meneruskan seleksi kembali ke pengontrol induk.itemSelectedatRow:
ditableView:didSelectRowAtIndexPath:
.Pendekatan ini memiliki manfaat tambahan karena cukup dapat digunakan kembali. Untuk menggunakan, impor kelas SimpleTableViewController di ViewController.h Anda, sesuaikan dengan SimpleTableViewDelegate, dan terapkan
itemSelectedAtRow:
metode. Kemudian, untuk membuka modal, cukup buat SimpleTableViewController baru, setel data tabel dan delegasikan, dan sajikan.Saya membuat contoh sederhana dan mempostingnya di github .
Lihat juga Menampilkan lembar tindakan menyebabkan kesalahan konteks tidak valid CGContext .
sumber
Satu lagi solusi:
tidak ada toolbar tetapi kontrol tersegmentasi (eyecandy)
sumber
Meskipun pertanyaan ini sudah lama, saya akan segera menyebutkan bahwa saya telah menggabungkan kelas ActionSheetPicker dengan fungsi kemudahan, sehingga Anda dapat menelurkan ActionSheet dengan UIPickerView dalam satu baris. Ini didasarkan pada kode dari jawaban atas pertanyaan ini.
Sunting: Sekarang juga mendukung penggunaan DatePicker dan DistancePicker.
UPD:
Versi ini tidak digunakan lagi: gunakan ActionSheetPicker-3.0 sebagai gantinya.
sumber
ActionSheetDatePicker
mode ini, Anda dapat menambahkan beberapa tombol ke toolbar di atas. Apakah ini mungkin hanya dengan normalActionSheetStringPicker
juga?Yap! Saya akhirnya menemukannya.
menerapkan kode berikut pada acara klik tombol Anda, untuk memunculkan lembar tindakan seperti yang diberikan pada gambar pertanyaan.
sumber
Solusi luar biasa Marcio untuk pertanyaan ini sangat membantu saya dalam menambahkan subview dalam bentuk apa pun ke UIActionSheet.
Untuk alasan yang (belum) sepenuhnya jelas bagi saya, batas UIActionSheet hanya dapat diatur setelah ditampilkan; solusi sagar dan marcio berhasil mengatasi masalah ini dengan pesan setBounds: CGRectMake (...) yang dikirim ke lembar tindakan setelah ditampilkan.
Namun, menyetel batas UIActionSheet setelah sheet ditampilkan akan membuat transisi yang tidak stabil saat ActionSheet muncul, di mana ia "muncul", dan kemudian hanya menggulir di atas 40 piksel terakhir atau lebih.
Saat mengukur UIPickerView setelah menambahkan subview, saya sarankan untuk membungkus pesan setBounds yang dikirim ke actionSheet di dalam blok animasi. Ini akan membuat pintu masuk actionSheet tampak lebih mulus.
sumber
Bagi orang-orang yang ingin menemukan fungsi DatePickerDoneClick ... berikut adalah kode sederhana untuk menutup Lembar Tindakan. Jelas aac harus menjadi ivar (yang masuk dalam file implmentasi .h Anda)
sumber
Saya tidak begitu mengerti mengapa
UIPickerView
terjadi di dalam aUIActionSheet
. Ini tampaknya menjadi solusi yang berantakan dan meretas, yang dapat rusak dalam rilis iOS di masa mendatang. (Saya pernah mengalami hal-hal seperti jeda ini di aplikasi sebelumnya, di manaUIPickerView
tidak ditampilkan pada ketukan pertama dan harus ditarik kembali - kebiasaan aneh denganUIActionSheet
).Apa yang saya lakukan hanyalah menerapkan
UIPickerView
dan kemudian menambahkannya sebagai subview ke tampilan saya, dan menganimasikannya bergerak ke atas seolah-olah itu disajikan seperti lembar tindakan.sumber
Untuk menambah solusi mengagumkan marcio,
dismissActionSheet:
dapat diimplementasikan sebagai berikut.Tambahkan metode ini ke kode Anda.
sumber
Saya pikir ini adalah cara terbaik untuk melakukannya.
ActionSheetPicker-3.0
Cukup banyak yang disarankan semua orang, tetapi menggunakan balok, yang merupakan sentuhan yang bagus!
sumber
Sejak iOS 8, Anda tidak bisa, itu tidak berfungsi karena Apple mengubah implementasi internal
UIActionSheet
. Silakan merujuk ke Dokumentasi Apple :sumber
Saya menyukai pendekatan yang diambil oleh Wayfarer dan flexaddicted, tetapi menemukan (seperti aZtral) bahwa itu tidak berfungsi karena backgroundTapButton adalah satu-satunya elemen yang merespons interaksi pengguna. Hal ini mengarahkan saya untuk meletakkan ketiga subviewnya: _picker, _pickerToolbar dan backgroundTapButton di dalam view yang berisi (popup) yang kemudian dianimasikan di dalam dan di luar layar. Saya juga membutuhkan tombol Batal di _pickerToolbar. Berikut adalah elemen kode yang relevan untuk tampilan munculan (Anda perlu menyediakan sumber data alat pilih dan metode delegasi Anda sendiri).
sumber