Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS

iOS dari awal dengan Swift: membangun aplikasi 1 daftar belanja

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called iOS From Scratch With Swift.
iOS From Scratch With Swift: Data Persistence and Sandboxing on iOS
iOS From Scratch With Swift: Building a Shopping List Application 2

Indonesian (Bahasa Indonesia) translation by Andy Nur (you can also view the original English article)

Dalam pelajaran dua, kami akan menempatkan apa yang kita pelajari dalam seri ini ke dalam praktek dengan menciptakan sebuah aplikasi daftar belanja. Sepanjang jalan, Anda juga akan mempelajari sejumlah konsep-konsep baru dan pola, seperti menciptakan kelas model kustom dan menerapkan pola kustom delegasi. Kami punya banyak tanah untuk menutupi jadi mari kita mulai.

Garis besar

Daftar Belanja aplikasi kita akan membuat memiliki dua fitur, mengelola daftar item dan membuat daftar belanja dengan memilih item dari daftar.

Kita akan membangun aplikasi dengan tab bar controller untuk membuat beralih di antara kedua-dua pandangan cepat dan mudah. Dalam pelajaran ini, kita fokus pada fitur pertama. Dalam pelajaran berikutnya, kami sentuhan akhir pada fitur ini dan zoom in pada belanja daftar, fitur kedua aplikasi.

Meskipun aplikasi daftar belanja tidak rumit dari perspektif pengguna, ada beberapa keputusan yang harus dibuat dalam perkembangannya. Apa jenis toko yang kita gunakan untuk menyimpan daftar item? Dapat pengguna menambahkan, mengedit, dan menghapus item? Ini adalah pertanyaan yang kami alamat dalam dua pelajaran.

Dalam pelajaran ini, saya juga menunjukkan bagaimana benih aplikasi daftar belanja dengan dummy data untuk memberikan pengguna baru sesuatu untuk memulai dengan. Penyemaian aplikasi dengan data sering adalah ide yang baik untuk membantu pengguna baru mendapatkan sampai dengan kecepatan cepat.

1. membuat proyek

Peluncuran Xcode dan membuat proyek baru berdasarkan template aplikasi pemandangan tunggal di iOS > bagian aplikasi.

Choosing the Single View Application Template

Nama proyek Shopping daftar dan masukkan nama organisasi dan pengenal. Menetapkan bahasa ke Swift dan perangkat untuk iPhone. Pastikan kotak centang di bawah dicentang. Memberitahu Xcode di mana untuk menyimpan proyek dan klik buat.

Configuring the Project

2. membuat daftar View Controller

Seperti Anda mungkin diharapkan, lihat daftar controller akan menjadi sebuah subclass dari UITableViewController. Membuat kelas baru dengan memilih New > File... dari Berkas menu. Pilih kelas Touch kakao dari iOS > sumber bagian.

Creating a Cocoa Touch Class

Nama kelas ListViewController dan membuat sebuah subclass dari UITableViewController. Biarkan kotak centang juga membuat XIB file dicentang dan membuat yakin bahasa diatur ke Swift. Memberitahu Xcode mana Anda ingin menyimpan kelas dan klik buat.

Configuring the List View Controller Class

Buka Main.storyboard, pilih tampilan controller yang sudah hadir, dan menghapusnya. Seret sebuah instance UITabBarController dari Object Library dan menghapus kontroler dua pandangan yang terhubung ke tab bar controller. Tarik UITableViewController dari Object Library, set kelas untuk ListViewController di Inspektur identitas dan menciptakan hubungan yang suci segue dari tab bar controller ke daftar Lihat controller.

Pilih tab bar controller, buka Inspektur atribut, dan membuat storyboard lihat awal controller dengan memeriksa kotak centang adalah awal View Controller.

Adding a Tab Bar Controller

Daftar view controller perlu akar Lihat controller dari controller navigasi. Pilih daftar tampilan controller dan pilih Embed di > pengontrol navigasi dari Editor menu.

Embedding the List View Controller in a Navigation Controller

Pilih tampilan tabel daftar tampilan controller dan mengatur sel-sel prototipe di Inspektur atribut ke 0.

Running the Application for the First Time

Menjalankan aplikasi dalam simulator untuk melihat apakah semuanya diatur dengan benar. Anda akan melihat sebuah meja kosong Lihat dengan bar navigasi di bagian atas dan Bilah tab di bagian bawah.

3. menciptakan kelas Model Item

Bagaimana kita akan bekerja dengan item dalam daftar belanja aplikasi? Dengan kata lain, apa jenis objek yang kita gunakan untuk menyimpan properti dari item, seperti namanya, harga dan string yang secara unik mengidentifikasi setiap item?

Pilihan yang paling jelas adalah untuk menyimpan item properti dalam kamus. Meskipun ini akan bekerja dengan baik, itu akan sangat membatasi dan memperlambat kita sebagai keuntungan aplikasi kompleksitas.

Untuk daftar belanja aplikasi, kita akan membuat sebuah kelas model kustom. Itu memerlukan sedikit lebih banyak pekerjaan untuk menyiapkan, tetapi itu akan membuat pengembangan lebih mudah di jalan.

Membuat sebuah class baru, Item, dan membuat sebuah subclass dari NSObject. Memberitahu Xcode di mana untuk menyimpan kelas dan klik buat.

Properti

Buka Item.swift dan menyatakan sifat empat:

  • UUID dari tipe String untuk secara unik mengidentifikasi setiap item
  • nama jenis String
  • Harga dari type Float
  • inShoppingList jenis Bool untuk menunjukkan jika item yang ada dalam daftar belanja

Sangat penting bahwa kelas Item yang sesuai dengan protokol NSCoding. Alasan untuk ini akan menjadi jelas dalam beberapa saat. Lihatlah apa yang kita punya sejauh ini. Komentar dihilangkan.

Masing-masing properti harus memiliki nilai awal. Kami menetapkan nama string kosong, harga untuk 0.0, dan inShoppingList ke false. Untuk menetapkan nilai awal uuid, kami membuat menggunakan kelas yang belum kita lihat sebelumnya, NSUUID. Kelas ini membantu kita membuat string unik atau UUID. Kami menginisialisasi instance kelas dan meminta untuk UUID sebagai string dengan menerapkan UUIDString().

Mencobanya dengan menambahkan kode snippet berikut metode viewDidLoad() kelas ListViewController.

Jalankan aplikasi dan lihatlah output di Xcode di konsol untuk melihat apa yang tampak seperti UUID dihasilkan. Anda harus melihat sesuatu seperti ini:

Pengarsipan

Salah satu strategi untuk menyimpan benda-benda kustom ke disk, seperti contoh kelas Item, adalah melalui proses yang dikenal sebagai pengarsipan. Kita akan menggunakan NSKeyedArchiver dan NSKeyedUnarchiver arsip dan unarchive contoh kelas Item.

Prefiks kelas, NS, menunjukkan bahwa kedua kelas yang didefinisikan dalam rangka Foundation. Kelas NSKeyedArchiver mengambil serangkaian obyek dan menyimpan ke disk sebagai data biner. Manfaat tambahan dari pendekatan ini adalah bahwa file biner umumnya lebih kecil daripada teks biasa file yang berisi informasi yang sama.

Jika kita ingin menggunakan NSKeyedArchiver dan NSKeyedUnarchiver untuk arsip dan unarchive contoh kelas Item, Item harus mengadopsi protokol NSCoding. Mari kita mulai dengan memperbarui kelas Item untuk memberitahu kompilator Item mengadopsi protokol NSCoding.

Ingat dari pelajaran tentang kerangka dasar, protokol NSCoding menyatakan dua metode yang kelas harus menerapkan untuk memungkinkan contoh kelas harus dikodekan dan diterjemahkan. Mari kita lihat bagaimana ini bekerja.

Pengkodean

Jika Anda membuat kelas kustom, maka Anda bertanggung jawab menentukan bagaimana contoh bahwa kelas harus dikodekan, dikonversi ke data biner. Dalam encodeWithCoder(_:), kelas yang sesuai dengan protokol NSCoding menentukan bagaimana contoh kelas harus dikodekan. Lihatlah pelaksanaan di bawah ini. Tombol yang kita gunakan tidak yang penting, tetapi biasanya Anda ingin menggunakan nama properti untuk kejelasan.

Decoding

Setiap kali objek dikodekan perlu dikonversi kembali ke instance kelas masing-masing, init(coder:) yang dipanggil. Tombol yang sama yang kita digunakan dalam encodeWithCoder(_:) yang digunakan dalam init(coder:). Hal ini sangat penting.

Perhatikan bahwa kita menggunakan kata kunci yang diperlukan. Ingat bahwa kita membahas kunci yang diperlukan sebelumnya dalam seri ini. Karena decodeObjectForKey(_:) kembali sebuah objek jenis AnyObject?, kami dilemparkan ke objek String.

Anda harus tidak pernah langsung menghubungi init(coder:) dan encodeWithCoder(_:). Mereka hanya dipanggil oleh sistem operasi. Dengan menyesuaikan Item kelas untuk protokol NSCoding, kami hanya memberitahu sistem operasi bagaimana encode dan decode kasus kelas.

Membuat kasus

Untuk memudahkan penciptaan baru kasus kelas Item, kami membuat initializer kustom yang menerima nama dan harga. Ini opsional, tetapi itu akan membuat pengembangan mudah seperti yang Anda lihat kemudian dalam pelajaran ini.

Buka Item.swift dan menambahkan initializer berikut. Ingat bahwa initializers tidak memiliki kata kunci func di depan nama mereka. Pertama kita memanggil initializer superclass, NSObject. Kami kemudian menetapkan nama dan harga properti instance Item.

Anda mungkin bertanya-tanya mengapa kita menggunakan self.name di init(name:price:) dan nama init(coder:) untuk menetapkan nama properti. Dalam konteks kedua, diri referensi contoh Item yang sedang kita berinteraksi dengan. Di Swift, Anda dapat mengakses properti tanpa menggunakan kata kunci diri. Namun, dalam init(name:price:) salah satu parameter yang memiliki nama yang identik dengan salah satu properti kelas Item. Untuk menghindari kebingungan, kami menggunakan kata kunci diri. Singkatnya, Anda dapat mengabaikan kata kunci diri untuk mengakses properti kecuali ada penyebab untuk kebingungan.

4. loading dan menyimpan item

Data kekal akan menjadi kunci dalam penerapan daftar belanja jadi mari kita lihat bagaimana kita akan menerapkan data kekal. Buka ListViewController.swift dan menyatakan sebuah variabel properti disimpan, barang-barang, jenis [Item]. Perhatikan bahwa nilai awal item array kosong.

Item yang ditampilkan dalam tampilan tabel Lihat controller akan disimpan dalam item. Penting bahwa item yang bisa berubah array maka var kata kunci. Mengapa? Kita akan menambahkan kemampuan untuk menambahkan item baru sedikit kemudian dalam pelajaran ini.

Dalam initializer kelas, kami memuat daftar item dari disk dan menyimpannya dalam properti item yang kita menyatakan beberapa saat yang lalu.

Metode loadItems() controller lihat adalah tidak lebih dari metode penolong untuk menjaga init? (coder:) metode ringkas dan mudah dibaca. Mari kita lihat pada pelaksanaan loadItems().

Loading item

Metode loadItems() dimulai dengan mengambil jalan file yang disimpan daftar item. Kita melakukan ini dengan memanggil pathForItems(), metode penolong lain yang kita akan melihat dalam beberapa saat. Karena pathForItems() kembali opsional jenis String?, kita mengikat hasil filePath konstan,. Kami membahas opsional mengikat sebelumnya dalam seri ini.

Namun apa yang kami tidak menutupi adalah di mana kata kunci dalam if pernyataan. Dengan menggunakan di mana kata kunci, kami menambahkan kendala tambahan untuk kondisi jika pernyataan. Di loadItems(), kami memastikan pathForItems() mengembalikan sebuah String. Menggunakan mana klausul, kami juga memverifikasi bahwa nilai filePath sesuai dengan file pada disk. Kami menggunakan NSFileManager kelas untuk ini.

NSFileManager adalah kelas kami belum bekerja dengan belum. Hotel ini menyediakan yang mudah-ke-menggunakan API untuk bekerja dengan sistem file. Kita memperoleh referensi ke instance kelas dengan meminta manajer default.

Kita kemudian memanggil fileExistsAtPath(_:) di pengelola default, melewati dalam path file kami memperoleh di baris pertama dari loadItems(). Jika file ada di lokasi yang ditentukan oleh file path, kami memuat isi file ke dalam properti item. Jika file tidak ada di lokasi, item properti ini tetap mempertahankan nilai awal, array kosong.

Memuat isi file dilakukan melalui kelas NSKeyedUnarchiver. Dapat membaca data biner yang terdapat dalam file dan mengkonversi ke objek grafik, array instance Item. Proses ini akan menjadi lebih jelas ketika kita melihat metode saveItems() dalam satu menit.

Sekarang mari kita lihat di pathForItems(), metode penolong kita dipanggil sebelumnya. Kami pertama kali mengambil jalur direktori dokumen di aplikasi sandbox. Langkah ini harus akrab dengan sekarang.

Metode kembali path ke file yang berisi daftar aplikasi item. Kita melakukan ini dengan mengambil jalan untuk direktori dokumen aplikasi sandbox dan menambahkan "barang" untuk itu.

Keindahan menggunakan URLByAppendingPathComponent(_:) adalah bahwa penyisipan jalan pemisah dilakukan bagi kita dimanapun diperlukan. Dengan kata lain, sistem memastikan bahwa kita menerima URL berlaku file. Perhatikan bahwa kita memanggil path() pada contoh NSURL dihasilkan untuk memastikan kita kembali sebuah objek String.

Menyimpan item

Meskipun kami tidak akan menyimpan item sampai nanti dalam pelajaran ini, itu adalah ide yang baik untuk menerapkannya sementara kita di itu. Pelaksanaan saveItems() adalah berkat sangat ringkas metode penolong pathForItems().

Kami pertama mengambil jalan ke file yang berisi daftar aplikasi item dan kemudian menulis isi properti item ke lokasi tersebut. Mudah. Kan?

Proses menulis grafik objek ke disk dikenal sebagai pengarsipan. Kami menggunakan NSKeyedArchiver kelas untuk mencapai hal ini dengan memanggil archiveRootObject(_:toFile:) NSKeyedArchiver.

Selama proses ini, setiap objek dalam objek grafik dikirim pesan encodeWithCoder(_:) untuk mengubahnya menjadi data biner. Ingat bahwa jarang ada kebutuhan untuk langsung menghubungi encodeWithCoder(_:).

Untuk memverifikasi bahwa memuat daftar item dari karya-karya disk, menambahkan pernyataan cetak ke metode viewDidLoad() kelas ListViewController. Menjalankan aplikasi dalam simulator dan periksa apakah semuanya bekerja.

Jika Anda mengambil melihat output di konsol Xcode's, Anda akan melihat bahwa properti item sama ke en array kosong. Itulah apa yang kita harapkan saat ini. Apa yang penting adalah bahwa item tidak sama dengan nol. Pada langkah berikutnya, kami akan memberikan pengguna beberapa item untuk bekerja dengan, suatu proses yang dikenal sebagai pembibitan.

5. penyemaian Penyimpanan Data

Penyemaian aplikasi dengan data sering dapat berarti perbedaan antara pengguna yang terlibat dan pengguna berhenti aplikasi setelah menggunakannya selama kurang dari satu menit. Penyemaian aplikasi dengan dummy data tidak hanya membantu pengguna mendapatkan sampai dengan kecepatan, itu juga menunjukkan pengguna baru bagaimana aplikasi terlihat dan terasa dengan data di dalamnya.

Penyemaian aplikasi daftar belanja dengan daftar awal item tidak sulit. Karena kita tidak ingin untuk membuat duplikat item, kami memeriksa selama peluncuran aplikasi jika penyimpanan data yang sudah diunggulkan dengan data. Jika penyimpanan data belum unggulan, kami memuat daftar dengan benih data dan menggunakan daftar tersebut untuk menciptakan penyimpanan data aplikasi.

Logika untuk pembibitan penyimpanan data yang dapat dipanggil dari sejumlah lokasi di sebuah aplikasi, tetapi penting untuk berpikir ke depan. Kita bisa menempatkan logika untuk pembibitan penyimpanan data dalam kelas ListViewController, tetapi bagaimana jika, dalam versi masa depan dari aplikasi, controller Lihat lainnya juga memiliki akses ke daftar item. Tempat yang lebih baik untuk benih penyimpanan data adalah di kelas AppDelegate. Mari kita lihat bagaimana ini bekerja.

Buka AppDelegate.swift dan mengubah pelaksanaan application(_:didFinishLaunchingWithOptions:) terlihat seperti yang ditunjukkan di bawah ini.

Satu-satunya perbedaan dengan implementasi sebelumnya adalah bahwa kita pertama memanggil seedItems(). Sangat penting bahwa penyemaian penyimpanan data berlangsung sebelum inisialisasi salah satu melihat controller, karena data menyimpan perlu buang bijinya sebelum salah satu pemandangan kontroler beban daftar item.

Pelaksanaan seedItems() tidak rumit. Kita mulai dengan menyimpan referensi ke objek default pengguna bersama dan kami kemudian memeriksa apakah pengguna default database memiliki sebuah entri untuk kunci dengan nama "UserDefaultsSeedItems" dan apakah entri ini boolean dengan nilai sejati.

Kunci dapat menjadi apa pun yang Anda suka selama Anda konsisten dalam penamaan tombol yang Anda gunakan. Kunci pengguna default database menjelaskan apakah aplikasi sudah diunggulkan dengan data. Hal ini penting karena kita hanya ingin benih aplikasi satu kali.

Jika aplikasi tidak buang bijinya belum, kami memuat daftar properti dari bundel aplikasi, seed.plist. File ini berisi array Kamus dengan kamus masing-masing mewakili item dengan nama dan harga.

Sebelum iterasi melalui seedItems array, kami menciptakan array yang bisa berubah untuk menyimpan Item hal yang kita akan membuat. Untuk setiap Kamus dalam seedItems array, kami membuat Item instance dengan menerapkan initializer yang kita menyatakan sebelumnya dalam pelajaran ini. Setiap item ditambahkan ke array item.

Akhirnya, kami membuat path ke file di mana kita akan menyimpan daftar item dan kita menulis isi array item ke disk seperti yang kita lihat dalam metode saveItems() ListViewController.

ArchiveRootObject(_:toFile:) metode mengembalikan nilai true jika operasi berakhir dengan sukses dan itu adalah hanya kemudian bahwa kami memperbarui pengguna default database dengan menetapkan nilai boolean untuk kunci "UserDefaultsSeedItems" ke true. Saat berikutnya meluncurkan aplikasi, Penyimpanan data tidak diunggulkan lagi.

Anda mungkin telah memperhatikan bahwa kami menggunakan metode penolong lain di seedItems(), pathForItems(). Pelaksanaannya sama dengan kelas ListViewController.

Sebelum Anda menjalankan aplikasi, pastikan untuk menyalin daftar properti, seed.plist, untuk proyek Anda. Tidak peduli mana Anda menyimpannya sebagai hal ini termasuk dalam bundel aplikasi.

Jalankan aplikasi dan memeriksa output di konsol untuk melihat jika penyimpanan data yang berhasil unggulan dengan isi seed.plist. Perhatikan bahwa penyemaian penyimpanan data dengan data atau memperbarui database membutuhkan waktu. Jika operasi memakan waktu terlalu lama, sistem dapat membunuh aplikasi Anda sebelum memiliki kesempatan untuk menyelesaikan peluncuran. Apple merujuk kepada peristiwa ini sebagai pengawas membunuh aplikasi Anda.

Aplikasi Anda diberikan sejumlah terbatas waktu untuk memulai. Jika gagal untuk memulai dalam kerangka waktu, sistem operasi membunuh aplikasi Anda. Ini berarti bahwa Anda harus hati-hati mempertimbangkan Kapan dan di mana Anda melakukan operasi tertentu, seperti penyemaian penyimpanan data aplikasi Anda.

6. menampilkan daftar item

Kami sekarang memiliki daftar item untuk bekerja dengan. Menampilkan item dalam tampilan tabel daftar view controller tidak sulit. Lihatlah pelaksanaan tiga metode UITableViewDataSource protokol yang ditunjukkan di bawah ini. Implementasi harus tampak akrab jika Anda sudah membaca tutorial tentang tabel dilihat.

Ada dua rincian, kita perlu untuk mengurus sebelum menjalankan aplikasi, menyatakan CellIdentifier konstan dan memberitahu tampilan tabel kelas yang digunakan untuk membuat sel-sel Lihat tabel.

Sementara kau di itu, menetapkan properti title controller Lihat daftar "Item".

Menjalankan aplikasi dalam simulator. Ini adalah apa yang harus Anda lihat di simulator.

Populating the List View Controller With Items

7. menambahkan item - Bagian 1

Tidak peduli seberapa baik kita menyusun daftar benih item, pengguna akan pasti ingin menambahkan item tambahan ke dalam daftar. Pada iOS, pendekatan umum untuk menambahkan item baru ke daftar adalah dengan menghadirkan pengguna dengan modal tampilan controller di mana data baru dapat dimasukkan. Ini berarti bahwa kita harus:

  • Tambahkan tombol ke antarmuka pengguna untuk menambahkan item baru
  • membuat tampilan controller yang mengelola pandangan bahwa menerima input dari pengguna
  • membuat item baru berdasarkan input pengguna
  • menambahkan item baru dibuat ke tampilan tabel

Langkah 1: Menambahkan tombol

Menambahkan tombol ke bar navigasi membutuhkan satu baris kode. Meninjau metode viewDidLoad() kelas ListViewController dan memperbaruinya untuk mencerminkan pelaksanaan di bawah ini.

Dalam pelajaran tentang tab bar controller, Anda belajar bahwa setiap tampilan controller memiliki properti tabBarItem. Demikian pula, setiap tampilan controller memiliki properti navigationItem, contoh yang unik dari UINavigationItem yang mewakili tampilan controller di panel navigasi orangtua Lihat controller-pengontrol navigasi.

Properti navigationItem memiliki properti leftBarButtonItem, contoh UIBarButtonItem, bahwa referensi bar tombol item yang ditampilkan di sisi kiri bar navigasi. Properti navigationItem juga memiliki titleView dan properti rightBarButtonItem.

Dalam viewDidLoad(), kita mengatur properti leftBarButtonItem Lihat controller navigationItem untuk contoh UIBarButtonItem dengan menerapkan init(barButtonSystemItem:target:action:), melewati dalam. Tambahkan sebagai argumen pertama. Argumen pertama adalah jenis UIBarButtonSystemItem, penghitungan. Hasilnya adalah sebuah sistem yang disediakan instance dari UIBarButtonItem.

Meskipun kami sudah temui pola target-action, parameter kedua dan ketiga init(barButtonSystemItem:target:action:) perlu penjelasan. Setiap kali tombol di panel navigasi disadap, pesan addItem(_:) dikirim untuk menargetkan, yaitu diri atau contoh ListViewController.

Seperti saya katakan, kami sudah temui pola target-tindakan ketika kita terhubung acara sentuhan tombol untuk tindakan di storyboard. Ini sangat mirip, dengan perbedaan bahwa sambungan dibuat pemrograman.

Pola target-tindakan adalah pola umum di Cocoa. Idenya sederhana. Objek membuat referensi ke pesan yang dikirim dan target, objek yang bertindak sebagai penerima pesan.

Pesan akan disimpan sebagai pemilih. Tunggu sebentar. Apa adalah pemilih? Pemilih adalah nama atau pengenal unik yang digunakan untuk memilih metode yang objek diharapkan untuk mengeksekusi. Anda dapat membaca lebih lanjut tentang penyeleksi dalam Apple kompetensi inti kakao panduan.

Sebelum menjalankan aplikasi dalam simulator, kita perlu membuat metode addItem(_:) yang sesuai dalam daftar Lihat controller. Jika kita tidak melakukan ini, lihat controller tidak mampu menanggapi pesan diterima ketika tombol disadap dan pengecualian dibuang, menabrak aplikasi.

Lihatlah format definisi metode di dalam potongan kode berikutnya. Seperti yang kita lihat sebelumnya dalam seri ini, tindakan menerima satu argumen, obyek yang akan mengirimkan pesan ke tampilan controller (target). Dalam contoh ini, pengirim adalah tombol di panel navigasi.

Saya telah menambahkan pernyataan cetak implementasi metode untuk menguji jika semuanya bekerja dengan benar. Membangun proyek dan menjalankan aplikasi untuk menguji tombol di panel navigasi.

Langkah 2: Membuat View Controller

Menciptakan subclass UIViewController baru dan nama itu AddItemViewController. Dalam AddItemViewController.swift, kita mendeklarasikan dua outlet untuk dua bidang teks, yang kita akan menciptakan dalam beberapa saat.

Kita juga perlu menyatakan dua tindakan di AddItemViewController.swift. Tindakan pertama, cancel(_:), membatalkan penciptaan item baru. Kedua tindakan, save(_:), menggunakan di input pengguna untuk membuat dan menyimpan item baru.

Buka Main.storyboard, seret sebuah instance UIViewController dari perpustakaan objek ke ruang kerja, dan set kelas untuk AddItemViewController di Inspektur identitas.

Creating the Add Item View Controller Class

Membuat sebuah manual Suci segue dengan menekan kontrol dan menyeret dari daftar View Controller objek ke objek menambahkan Item View Controller. Pilih sekarang Modally dari menu yang muncul.

Creating a Segue to the Add Item View Controller
Creating a Segue to the Add Item View Controller

Pilih segue yang baru saja dibuat, buka Inspektur atribut, dan menetapkan pencirinya untuk AddItemViewController.

Configuring the Segue to the Add Item View Controller

Sebelum kita menambahkan bidang teks, pilih Tambah item tampilan controller dan menanamkan pada controller navigasi dengan memilih Embed di > pengontrol navigasi dari Editor menu.

Di awal pelajaran ini, kami pemrograman menambahkan UIBarButtonItem ke daftar view controller navigasi item. Mari kita Cari tahu bagaimana ini bekerja di storyboard. Zoom in pada Tambah item tampilan controller dan menambah dua contoh UIBarButtonItem navigasi bar, posisi satu di setiap sisi. Pilih kiri bar tombol item, buka Inspektur atribut, dan mengatur pengenal Batal. Melakukan hal yang sama untuk hak bar tombol item, menetapkan Identifier yang menyelamatkan.

Configuring the Navigation Bar of the Add Item View Controller

Pilih objek menambahkan Item View Controller, buka Inspektur sambungan di sebelah kanan, dan menghubungkan tindakan cancel(_:) dengan kiri bar tombol item dan tindakan save(_:) dengan hak bar tombol item.

Connecting the Actions in the Connections Inspector

Tarik dua contoh UITextField dari perpustakaan objek ke tampilan Tambah item Lihat controller. Posisi bidang teks seperti ditunjukkan di bawah. Jangan lupa untuk menambahkan kendala diperlukan untuk bidang teks.

Adding Text Fields to the Add Item View Controller

Pilih bidang atas teks, buka Inspektur atribut, dan masukkan nama di bidang Placeholder. Pilih bidang teks bawah dan di Inspektur atribut, mengatur teks pengganti untuk harga dan Keyboard untuk nomor Pad. Hal ini memastikan bahwa pengguna hanya dapat memasukkan nomor di bidang teks dasar. Pilih objek menambahkan Item View Controller, buka Inspektur koneksi, dan menghubungkan outlet yang nameTextField dan priceTextField dengan kolom teks yang sesuai dengan tampilan Lihat controller.

Itu cukup banyak pekerjaan. Segala sesuatu yang kami lakukan dalam storyboard juga dapat dicapai pemrograman. Beberapa pengembang tidak bahkan menggunakan storyboard dan membuat seluruh aplikasi antarmuka pemrograman. Itulah apa yang terjadi di bawah kap pula.

Langkah 3: Menerapkan addItem(_:)

Dengan AddItemViewController siap pakai, mari kita kembali kegiatan addItem(_:) di ListViewController. Pelaksanaan addItem(_:) pendek seperti yang Anda lihat di bawah ini. Kita memanggil performSegueWithIdentifier(_:sender:), melewati dalam pengenal AddItemViewController kami terletak di storyboard dan diri, lihat controller.

Langkah 4: Mengabaikan View Controller

Pengguna juga harus mampu menolak pandangan controller dengan menekan Batalkan atau Simpan tombol Tambah item Lihat controller. Kembali tindakan yang cancel(_:) dan save(_:) di AddItemViewController dan update implementasi mereka seperti yang ditunjukkan di bawah ini. Kami akan kembali tindakan save(_:) sedikit kemudian di tutorial ini.

Ketika kita memanggil dismissViewControllerAnimated(_:completion:) pada controller pemandangan pemandangan yang disajikan modally, controller modal Lihat meneruskan pesan itu ke controller pemandangan yang disajikan Lihat controller. Dalam contoh kita, ini berarti bahwa Tambah item Lihat controller meneruskan pesan ke controller navigasi, yang, pada gilirannya, meneruskannya ke daftar Lihat controller. Argumen kedua dari dismissViewControllerAnimated(_:completion:) adalah penutupan yang dijalankan ketika animasi selesai.

Menjalankan aplikasi dalam simulator untuk melihat kelas AddItemViewController dalam tindakan. Jika Anda menekan bidang teks nama atau harga, keyboard harus secara otomatis muncul dari bawah.

Adding an Item in the Add Item View Controller

7. menambahkan item - Bagian 2

Bagaimana daftar view controller tahu ketika item baru telah ditambahkan oleh Tambah item Lihat controller? Haruskah kita tetap referensi ke daftar view controller yang disajikan Tambah item Lihat controller? Ini akan memperkenalkan kopel ketat, yang bukan ide yang baik, karena itu membuat kode kita kurang independen dan kurang dapat digunakan kembali.

Kita dihadapkan dengan masalah dapat diselesaikan dengan menerapkan protokol kustom delegasi. Mari kita lihat bagaimana ini bekerja.

Delegasi

Idenya sederhana. Setiap kali pengguna keran Simpan tombol, tambahkan item Lihat controller mengumpulkan informasi dari teks bidang dan memberitahu para delegasi bahwa item baru diselamatkan.

Delegasi objek harus menjadi sebuah obyek yang mematuhi protokol kustom delegasi yang kita mendefinisikan. Terserah ke objek delegasi untuk memutuskan apa yang harus dilakukan dengan informasi Tambah item Lihat controller mengirim. Tambahkan item Lihat controller hanya bertanggung jawab untuk menangkap input pengguna dan memberitahukan para delegasi.

Buka AddItemViewController.swift dan menyatakan protokol AddItemViewControllerDelegate di atas. Protokol mendefinisikan satu metode, untuk memberitahu delegasi yang item disimpan. Melewati sepanjang nama dan harga item.

Sebagai pengingat, Deklarasi protokol mendefinisikan atau menyatakan metode dan properti yang benda-benda yang mematuhi protokol harus menerapkan. Setiap metode dan properti di sebuah protokol yang cepat diperlukan.

Kita juga perlu untuk mendeklarasikan properti untuk delegasi. Delegasi adalah jenis AddItemViewControllerDelegate?. Perhatikan tanda tanya, yang menunjukkan jenis opsional.

Seperti yang saya sebutkan dalam pelajaran tentang tabel dilihat, itu adalah praktik yang baik untuk meneruskan pengirim pesan, objek memberitahukan objek delegasi, sebagai argumen pertama dari setiap metode delegasi. Hal ini membuat mudah untuk objek delegasi untuk berkomunikasi dengan si pengirim tanpa persyaratan ketat untuk menjaga referensi ke delegasi.

Memberitahukan delegasi

Saatnya untuk menggunakan protokol delegasi yang kita dinyatakan beberapa saat yang lalu. Kembali save(_:) metode dalam kelas AddItemViewController dan update pelaksanaannya seperti ditunjukkan di bawah.

Kami menggunakan opsional binding dengan aman ekstrak nilai-nilai bidang teks nama dan harga. Kami memberitahukan delegasi dengan menerapkan metode delegasi kita menyatakan sebelumnya. Pada akhirnya, kita mengabaikan Lihat controller.

Rincian dua yang layak menunjuk keluar. Apakah Anda melihat tanda tanya setelah properti delegasi? Dalam Swift, membangun ini dikenal sebagai opsional chaining. Karena delegasi properti adalah opsional, itu tidak dijamin akan memiliki nilai. Dengan menambahkan tanda tanya ke properti delegasi ketika menerapkan metode delegasi, metode hanya dipanggil jika properti delegasi memiliki nilai. Opsional chaining membuat kode Anda lebih aman.

Perhatikan juga bahwa kita menciptakan pelampung dari nilai yang disimpan dalam priceAsString. Hal ini diperlukan, karena metode delegasi mengharapkan pelampung sebagai parameter ketiga, bukan string.

Menanggapi menyimpan peristiwa

Bagian akhir dari teka-teki adalah untuk membuat ListViewController sesuai dengan protokol AddItemViewControllerDelegate. Buka ListViewController.swift dan memperbarui Deklarasi antarmuka ListViewController untuk membuat kelas yang sesuai dengan protokol baru.

Kita sekarang perlu untuk menerapkan metode yang didefinisikan dalam protokol AddItemViewControllerDelegate. Dalam ListViewController.swift, tambahkan berikut pelaksanaan controller(_:didSaveItemWithName:andPrice:).

Kita membuat sebuah instance Item baru dengan menerapkan init(name:price:), melewati dalam nama dan harga yang kami terima dari Tambah item Lihat controller. Pada langkah berikutnya, properti item diperbarui dengan menambahkan item baru dibuat. Tentu saja, tampilan tabel tidak otomatis mencerminkan penambahan item baru. Kita secara manual menyisipkan baris baru ke dalam tampilan tabel. Untuk menyimpan perubahan ke disk, kita memanggil saveItems() pada view controller, yang kami menerapkan sebelumnya dalam tutorial ini.

Pengaturan delegasi

Bagian akhir dari teka-teki ini agak kompleks adalah untuk menetapkan delegasi Tambah item Lihat controller ketika menyajikan kepada pengguna. Kita melakukan ini di prepareForSegue(_:sender:) seperti yang kita lihat sebelumnya dalam seri ini.

Jika segue pengenal sama dengan AddItemViewController, kami meminta segue destinationViewController nya. Anda mungkin berpikir tujuan tampilan controller Tambah item Lihat controller, tapi ingat bahwa Tambah item view controller yang tertanam dalam controller navigasi.

Ini berarti bahwa kita perlu mengambil item pertama dalam tumpukan navigasi pengontrol navigasi, yang memberi kita akar Lihat controller atau Tambah item Lihat controller objek kami sedang mencari. Kami kemudian menetapkan properti delegasi Tambah item Lihat controller untuk diri sendiri, daftar Lihat controller.

Jalankan aplikasi sekali lagi untuk melihat bagaimana segala sesuatu bekerja bersama-sama-seperti sulap.

Kesimpulan

Itu banyak untuk menerima, tetapi telah kita capai cukup sedikit sudah. Dalam pelajaran berikutnya, kami membuat beberapa perubahan ke daftar view controller untuk mengedit dan menghapus item dari daftar. Dalam pelajaran itu, kita juga menambahkan kemampuan untuk membuat daftar belanja dari daftar item.

Jika Anda memiliki pertanyaan atau komentar, Anda dapat meninggalkan mereka di komentar di bawah atau mengulurkan tangan kepada saya di Twitter.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.