Dalam video WWDC 2013, Apple menyarankan untuk menampilkan picker di tempat dalam tampilan tabel di iOS 7. Bagaimana cara menyisipkan dan menganimasikan tampilan antara sel tampilan tabel?
Seperti ini, dari aplikasi kalender Apple:
Dalam video WWDC 2013, Apple menyarankan untuk menampilkan picker di tempat dalam tampilan tabel di iOS 7. Bagaimana cara menyisipkan dan menganimasikan tampilan antara sel tampilan tabel?
Seperti ini, dari aplikasi kalender Apple:
Jawaban:
Dengan iOS7, Apple merilis kode sampel
DateCell
.Anda dapat mengunduh kode sampel di sini: DateCell .
sumber
Anda dapat menggunakan jawaban yang saya berikan sebelumnya di bawah atau menggunakan kelas baru ini di Swift yang saya buat untuk membuat tugas ini jauh lebih sederhana dan lebih bersih: https://github.com/AaronBratcher/TableViewHelper
Saya menemukan kode yang disediakan oleh Apple bermasalah dalam beberapa cara:
Untuk tabel sel statis, saya menentukan sel pemilih tanggal saya di bawah sel tampilan tanggal saya dan memiliki bendera yang mengidentifikasi jika saya mengeditnya. Jika ya, saya mengembalikan tinggi sel yang sesuai, jika tidak, saya mengembalikan tinggi sel nol.
Ketika baris yang menunjukkan tanggal diklik, saya mengubah bendera dan melakukan animasi pembaruan untuk menampilkan alat pilih.
Jika saya memiliki beberapa alat pilih tanggal / waktu dalam tabel yang sama, saya menyetel bendera sesuai dengan klik dan memuat ulang baris yang sesuai. Saya telah menemukan bahwa saya dapat menyimpan tabel statis saya, menggunakan lebih sedikit kode, dan lebih mudah untuk memahami apa yang terjadi.
sumber
Menggunakan storyboard dan tabel statis saya dapat mencapai hasil yang sama menggunakan kode berikut. Ini adalah solusi yang bagus karena jika Anda memiliki banyak sel berbentuk aneh atau ingin memiliki beberapa sel yang ditampilkan / disembunyikan secara dinamis, kode ini akan tetap berfungsi.
sumber
[tableView reloadData];
panggilan tidak diperlukan. Saat ini menonaktifkan pemilihan baris, tetapi lebih baik untuk membatalkan pilihan baris seperti ini:[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
Saya telah mengambil sumber DateCell dari Apple, dan menghapus file storyboard.
Jika Anda menginginkannya tanpa storyboard, lihat: https://github.com/ajaygautam/DateCellWithoutStoryboard
sumber
UIDatePicker
denganUIPickerView
. Saya mencoba beberapa hal dan dapat ditampilkanpickerView
di setiap sel tetapi tidak diperbarui dengan setiap sel. Saya telah memposting pertanyaan dan kode saya di sini . Silakan lihat dan akan sangat baik jika Anda dapat menyarankan saya solusi.UIDatePicker
denganUIPickerView
tetapi dengan beberapa bug. 1. Itu macet saat Anda membukaUIPickerView
dan menggulir tabel. 2. Secara otomatis memberikan nilai keUILabel
Detail di baris bawah tabel ketika nilai-nilai diberikan ke label Details di baris atas. Ini kode sayaSalah satu tutorial terbaik tentang ini adalah UIDatePicker in-line iOS 7 - Bagian 2 . Pada dasarnya di sini saya menggunakan sel tampilan tabel statis dan menerapkan beberapa metode tambahan. Saya menggunakan Xamarin dan C # untuk ini:
Anda harus aktif
Clip Subviews
.Mengatur ketinggian:
Dari variabel kelas:
private bool datePickerIsShowing = false;
Tampilkan pemilih tanggal:
Sembunyikan pemilih tanggal:
Dan memanggil fungsi ini:
sumber
Saya telah membuat pengontrol tampilan kustom saya sendiri untuk menyederhanakan proses penambahan inline picker inline dalam tableview. Anda cukup membuat subkelasnya dan mengikuti beberapa aturan sederhana dan ini menangani presentasi pemilih tanggal.
Anda dapat menemukannya di sini bersama dengan contoh proyek yang mendemonstrasikan cara menggunakannya: https://github.com/ale84/ALEInlineDatePickerViewController
sumber
Saya menemukan jawaban untuk kesalahan dalam contoh datecell apel di mana Anda harus memiliki baris di bawah sel data terakhir atau Anda mendapatkan kesalahan. Dalam metode CellForRowAtIndexPath, ganti baris ItemData dengan
Setelah mengganti kode sampel, saya sekarang dapat menampilkan tampilan sel datePicker tanpa sel di bawahnya.
Saya baru saja bergabung dengan stackoverflow jadi jika ini ada di tempat yang salah atau di tempat lain, saya minta maaf.
sumber
Jawaban dari Aaron Bratcher berhasil kecuali jika digunakan dengan banyak bagian. Animasi agak berombak dan tidak menggeser bagian berikutnya dengan baik. Untuk memperbaikinya, saya mengulang melalui set bagian berikutnya dan menerjemahkan baris ke bawah dengan jumlah yang sama dengan ketinggian pemetik tanggal.
Saya mengedit didSelectRowAtIndexPath menjadi:
sumber
Menambah jawaban sebelumnya,
Saya mencoba solusi @datinc dan @Aaron Bratcher, keduanya bekerja dengan baik tetapi animasinya tidak begitu bersih dalam tableView statis yang dikelompokkan.
Setelah memainkannya sedikit, saya mendapatkan kode ini yang berfungsi bersih dan bagus untuk saya -
Perubahan utama adalah menggunakan -
untuk memperbarui baris, dengan cara ini bagian tabel dan sel lainnya tidak dianimasikan.
Semoga membantu seseorang.
Shani
sumber
Menambahkan ke jawaban sebelumnya dan solusi @Aaron Bratcher ...
Saya mendapatkan animasi berombak sejak iOS 9, dan tabel memerlukan waktu beberapa saat untuk dimuat, dan cukup mengganggu. Saya mempersempitnya hingga pengambil tanggal lambat memuat dari storyboard. Menambahkan alat pilih secara terprogram daripada di papan cerita meningkatkan kinerja pemuatan, dan sebagai produk sampingan, animasinya menjadi lebih mulus.
Hapus pemilih tanggal dari storyboard dan memiliki sel kosong, yang Anda setel tingginya seperti pada jawaban sebelumnya, lalu panggil inisialisasi di viewDidLoad:
Kemudian terapkan tindakan misalnya
Ini memuat tabel jauh lebih cepat dari sebelumnya. Anda juga menghapus garis animasi dari yang
didSelectRowAtIndexPath
dianimasikan dengan mulus tanpanya (ymmv).sumber
Menggunakan jawaban ini tanpa animasi berfungsi dengan benar di iOS 8.1. Saya telah mengubahnya menjadi Swift di bawah ini:
sumber
Berikut adalah cara lain untuk menyelesaikan soal tanpa bilangan konstan statis. Semua sel dapat digunakan dalam tampilan tabel statis dan dinamis. Metode ini menggunakan sel tunggal untuk pemilih judul dan tanggal!
Btw Anda dapat memiliki sebanyak mungkin pemilih tanggal di meja Anda sesuai keinginan!
Buat subclass UITableViewCell :
Buat kelas CPDatePickerTableViewCell dari CPTableViewCell kami
Dalam pengontrol tampilan Anda, implementasikan dua metode delegasi ini
Contoh cara menyiapkan batasan di Pembuat antarmuka
Selain itu saya telah menulis kelas sel khusus untuk UITextField dan UITextView di mana tableView: didSelectRowAtIndexPath: dipanggil ketika sel dipilih!
CPTextFieldTableViewCell
CBTextViewTableViewCell
Tinggi sel dinamis dan baris akan bertambah ketika teks dibungkus dengan baris baru!
sumber
Cara termudah untuk menggunakan DateCell dalam versi Swift: Gunakan contoh ini .
Seret kelas " DateCellTableViewController.swift " ke proyek Anda.
Buka "Main.storyboard" dan Salin Objek ViewController "DateCell" dan tempelkan di storyboard Anda.
sumber