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

Menjelajahi Tab Bar Controller

by
Read Time:16 minsLanguages:
This post is part of a series called Learn iOS SDK Development From Scratch.
Navigation Controllers and View Controller Hierarchies
Data Persistence and Sandboxing on iOS

Indonesian (Bahasa Indonesia) translation by Keti Pritania (you can also view the original English article)

Sementara navigasi controller membiarkan pengguna menavigasi hirarkis konten atau kompleks data dengan mengelola tumpukan Lihat controller, tab bar controller mengelola serangkaian view controller yang tentu tidak memiliki keterkaitan satu sama lain. Dalam artikel ini, kita akan menjelajahi tab bar controller secara lebih rinci dengan membuat tab aplikasi dari awal.


Pengenalan

UITabBarController kelas yang lain UIViewController subclass. Sementara navigasi controller mengatur tumpukan controller terkait tampilan, tab bar controller mengelola serangkaian pemandangan pengendali yang tidak ada hubungannya eksplisit dengan satu sama lain.

Aplikasi jam dan musik pada iOS adalah dua contoh dari tab bar controller. Seperti subclass UIViewController lain, tab bar controller mengelola sebuah instance UIView.

Tampilan tab bar controller terdiri dari dua subviews:

  • Bilah tab di bagian bawah tampilan
  • pandangan dari salah satu controller lihat tab bar controller mengatur

Sebelum kita mulai

Ada beberapa keberatan terhadap sadar ketika bekerja dengan tab bar controller. Meskipun contoh UITabBar hanya dapat menampilkan lima tab, UITabBarController kelas dapat mengelola lebih Lihat controller. Setiap kali kontroler bar tab mengelola lebih dari lima tampilan controller, Bilah tab terakhir pada bilah tab berjudul lebih.

Kontroler tambahan pemandangan yang dapat diakses melalui tab ini dan itu bahkan dimungkinkan untuk mengedit posisi tab dalam bilah tab.

Meskipun tab bar controller mengatur tampilan, aplikasi Anda tidak seharusnya langsung berinteraksi dengan tampilan tab bar controller.

Jika Anda memutuskan bahwa tab bar controller adalah pilihan yang tepat untuk aplikasi, tab bar controller diperlukan untuk menjadi pengendali Lihat akar jendela aplikasi. Dengan kata lain, akar pemandangan dari jendela aplikasi adalah selalu tampilan tab bar controller. Tab bar controller harus tidak pernah diinstal sebagai anak lain lihat controller. Ini adalah salah satu perbedaan kunci dengan navigasi controller.


Tab Perpustakaan

Dalam artikel ini, kita kembali aplikasi perpustakaan yang kami bangun di artikel sebelumnya. Dengan demikian, kita dapat menggunakan kembali beberapa kelas dan mendapatkan sampai dengan kecepatan lebih cepat. Selain itu, ia akan menampilkan navigasi controller dan tab bar controller yang berbeda dan bahwa mereka yang digunakan dalam situasi yang berbeda dan menggunakan kasus-kasus.

Aplikasi yang kita akan membangun dalam pelajaran ini akan dinamakan tab Perpustakaan dan akan berdasarkan UITabBarController kelas. Sementara kita membangun aplikasi tab Perpustakaan, Anda akan melihat bahwa menggunakan kontroler bar tab pasukan aplikasi dalam paradigma antarmuka pengguna yang sangat spesifik yang memungkinkan untuk fleksibilitas yang sedikit. Tab bar controller sangat berguna, tetapi Anda harus menerima bahwa mereka menempatkan batasan pada antarmuka pengguna aplikasi Anda sampai batas tertentu.

Buka Xcode, membuat proyek baru (File > baru > proyek...), dan pilih template aplikasi yang kosong.

Nama proyek perpustakaan Tabbed, menetapkan pengidentifikasi nama organisasi, dan menetapkan perangkat untuk iPhone. Memberitahu Xcode mana Anda ingin menyimpan proyek dan tekan buat.

Meskipun Xcode termasuk template tab aplikasi, saya lebih suka untuk memulai dengan template aplikasi kosong sehingga Anda memahami bagaimana berbagai potongan teka-teki cocok bersama. Anda akan melihat bahwa tab bar controller tidak yang rumit.


Mengambil kepala mulai

Ketika aplikasi tab Perpustakaan selesai, tab bar controller aplikasi akan mengelola enam Lihat controller. Alih-alih membuat setiap kelas controller pemandangan dari awal, kita akan menipu sedikit oleh menggunakan controller kelas lihat bahwa kita diciptakan dalam artikel sebelumnya.

Selain itu, kami akan membuat beberapa contoh tampilan controller kelas yang sama untuk menyelamatkan kita beberapa waktu. Tujuan artikel ini adalah bukan untuk menciptakan sekelompok Lihat controller kelas. Pada titik ini, Anda harus cukup akrab dengan cara kerjanya.

Men-download kode sumber dari artikel sebelumnya dan membuka proyek Xcode yang disertakan dalam file sumber di jendela Finder baru. Menemukan kelas TSPAuthorsViewController, TSPBooksViewController dan TSPBookCoverViewController dan menyeret mereka ke proyek baru Anda. Pastikan untuk menyalin file ke proyek baru dengan memeriksa kotak centang yang berlabel salinan item ke folder tujuan kelompok (jika diperlukan) dan jangan lupa untuk menambahkan file ke target tab Perpustakaan.

Selain ini tiga kelas, kita juga perlu untuk menyalin folder sumber daya, yang berisi Books.plist dan file gambar, ke proyek baru kami. Tarik folder bernama sumber daya ke proyek kami dan menggunakan pengaturan yang sama yang kita gunakan untuk menyalin file kelas. Sekarang kita siap untuk instantiate aplikasi tab bar controller dan mengisi dengan view controller yang pertama.


Menambahkan sebuah Tab Bar Controller

Menambahkan tab bar controller mudah. Buka proyek utama storyboard, Main.storyboard. Tunggu sebentar. Dimana ada storyboard saya? Karena kami memilih template aplikasi kosong, Xcode tidak memberi kita storyboard.

Menambahkan Storyboard

Pilih New > File... dari File menu dan memilih jalan cerita dari antarmuka pengguna iOS kategori di sebelah kiri.

Mengatur kelompok perangkat iPhone dan nama jalan cerita utama. Ada tidak perlu untuk menambahkan ekstensi .storyboard. Xcode akan menambahkan bahwa untuk Anda.

Kita juga harus memberitahu Xcode yang dibutuhkan untuk menggunakan Main.storyboard sebagai interface utama dari aplikasi. Pilih proyek di proyek navigasi, pilih tab Perpustakaan target dari daftar target, dan mengatur utama antarmuka utama atau Main.storyboard.

Sebelum kita mulai bekerja dengan storyboard, kita perlu memperbarui saat ini pelaksanaan aplikasi: didFinishLaunchingWithOptions: di kelas TSPAppDelegate. Buka TSPAppDelegate.m dan update implementasi seperti ditunjukkan di bawah.

Anda dapat membuat aplikasi iOS tanpa storyboard, tapi itu berarti bahwa Anda harus secara eksplisit instantiate jendela aplikasi, yang adalah apa yang Anda lihat dalam pelaksanaan aplikasi: didFinishLaunchingWithOptions:. Ketika bekerja dengan storyboard, namun, Anda hanya kembali ya dan storyboard melakukan sisanya.

Menambahkan sebuah Tab Bar Controller

Buka Main.storyboard dan seret sebuah instance UITabBarController dari Object Library di sebelah kanan. Secara default, tab bar controller dilengkapi dengan dua kontroler pemandangan. Namun, saya ingin menggambarkan bagaimana Anda dapat menambahkan tampilan controller ke tab bar controller secara manual jadi Pilih tampilan controller — tidak tab bar controller — dan menghapusnya dari storyboard.

Jika Anda menjalankan aplikasi di iOS Simulator, Anda harus Bilah tab di bagian bawah dan latar belakang hitam. Ini mungkin tampak tidak penting, tapi itu menunjukkan bagaimana tab bar controller bekerja. Tab bar controller mengatur array Lihat controller, mirip dengan bagaimana mengelola kontroler navigasi tumpukan Lihat controller.

Apa yang perlu kita lakukan adalah menambahkan beberapa tampilan controller untuk storyboard dan menambahkannya ke properti viewControllers dari tab bar controller. Mari kita lihat bagaimana ini bekerja.

Menambahkan tampilan controller

Seret sebuah instance UITableViewController dari perpustakaan objek ke ruang kerja dan set kelas untuk TSPAuthorsViewController di Inspektur identitas. Pilih tampilan tabel controller Lihat dan atur jumlah sel-sel prototipe untuk 0 di Inspektur atribut seperti yang kita lakukan dalam tutorial sebelumnya.

Untuk menambah controller pandangan penulis bar array controller dari controller lihat tab, seret dari tab bar controller ke controller pandangan penulis sambil menahan tombol kontrol. Pilih tampilan controller-di bawah kategori hubungan Suci Segue — dari menu yang muncul.

Controller tab bar dengan satu tab tidak yang berguna jadi mari kita tambahkan lain lihat controller ke dalam campuran. Tarik contoh UITableViewController lain dari perpustakaan objek, set kelas untuk TSPBooksViewController, dan mengatur jumlah sel-sel prototipe ke 0. Menciptakan hubungan Suci segue seperti yang kita lakukan untuk penulis Lihat controller.

Tambahkan sebuah instance UIViewController ke ruang kerja dan set kelas untuk TSPBookCoverViewController di Inspektur identitas. Tambahkan sebuah instance UIImageView pada tampilan controller, seperti yang kita lakukan dalam artikel sebelumnya, dan terhubung dengan outlet bookCoverView Lihat controller. Menciptakan hubungan Suci segue dengan tab bar controller seperti yang kita lakukan untuk meja Lihat controller.

Anda hanya dapat membuat segues ketika ruang kerja tidak diperbesar keluar, yang dapat menjadi masalah di kali. Namun, Anda juga dapat membuat koneksi, seperti segues, di navigasi di sebelah kiri. Hal ini sering jauh lebih mudah dan kurang kikuk.

Membangun dan menjalankan aplikasi. Pada titik ini, tab bar berisi tiga tab. Menekan tab menunjukkan tampilan controller terkait dengan tab.

Apakah Anda mencoba menekan nama penulis penulis Lihat controller? Dan mengapa adalah buku Lihat controller menunjukkan tampilan tabel kosong? Saatnya untuk beberapa debugging.

Memperbaiki penulis View Controller

Jika Anda menekan nama penulis di controller pandangan penulis, aplikasi lumpuh. Hal pertama yang harus Anda lakukan ketika Anda dihadapkan dengan sebuah kecelakaan adalah memeriksa Xcode di konsol. Ini adalah apa yang ia memberitahu saya:

Pesan yang menampilkan Xcode di konsol ini tidak sulit untuk memecahkan. Kami memberitahu controller lihat untuk melakukan segue dengan pengenal BooksViewController, tetapi segue itu tidak ada. Hasilnya adalah sebuah kecelakaan.

Bug ini mudah untuk memperbaiki dengan embedding controller pandangan penulis di navigasi controller, menciptakan segue untuk instance kelas TSPBooksViewController, dan nama segue BooksViewController. Aku meninggalkan bahwa hingga Anda sebagai tugas karena kita sudah melakukan hal ini dalam artikel sebelumnya.

Isu yang lebih penting dalam contoh ini adalah pemahaman bahwa tiga tampilan controller yang terhubung ke tab bar controller tidak berkomunikasi dengan satu sama lain. Ide di balik bar controller dan pengontrol navigasi tab ini sangat berbeda. Pengontrol navigasi mempertahankan array Lihat controller, tumpukan navigasi. Lihat controller dalam susunan navigasi memiliki hubungan implisit dengan satu sama lain dalam arti bahwa mereka adalah bagian dari susunan navigasi yang sama.

Kontroler bar tab juga mengelola sebuah array dari tampilan controller, tapi lihat controller tidak tahu tentang satu sama lain. Mereka tidak dapat berkomunikasi dengan satu sama lain melalui tab bar controller. Dalam artikel sebelumnya, kami melewati data dari controller pandangan penulis buku Lihat controller ketika seorang penulis sebagai mengetuk. Pola ini tidak berlaku di tab bar controller. Tentu saja, kita dapat menerapkan solusi untuk menunjukkan pengguna buku Lihat controller ketika seorang penulis disadap di controller pandangan penulis, tetapi sangat penting bahwa Anda memahami bahwa itu bukan tujuan dari tab bar controller.

Aplikasi jam dan musik pada iOS adalah contoh yang baik bagaimana tab bar controller harus digunakan. Lihat controller yang mengelola tab bar controller dalam aplikasi musik tidak memiliki hubungan satu sama lain terlepas dari kenyataan bahwa mereka menunjukkan lagu.

Sebelum Anda melanjutkan, pastikan bahwa Anda memahami konsep-konsep pengontrol navigasi dan kontroler bar tab karena mereka penting nanti dalam seri ini.


Menambahkan lain meja View Controller

Mari kita menambahkan kontroler Lihat keempat ke tab bar controller yang menunjukkan setiap buku di Books.plist. Menciptakan subclass UITableViewController baru dan nama itu TSPAllBooksViewController.

Controller pandangan ini akan mengekstrak semua buku-buku dari Books.plist dan menampilkan mereka berdasarkan abjad dalam tampilan tabel. Buka TSPAllBooksViewController.m dan menambahkan buku properti baru jenis NSArray untuk kelas ekstensi di bagian atas.

Dalam tampilan controller viewDidLoad metode, kita memanggil extractBooks, metode penolong yang kami akan menerapkan segera. Saya biasanya mencoba untuk menjaga viewDidLoad sebagai ringkas mungkin oleh pembungkus tugas dalam metode penolong seperti extractBooks. Hal ini membuat kode lebih maintainable dan lebih mudah dibaca.

Mari kita memeriksa pelaksanaan extractBooks. Kita mulai dengan menciptakan array yang bisa berubah yang kami akan menambahkan buku setiap penulis dalam daftar properti. Dua garis harus akrab jika Anda membaca artikel sebelumnya. Kami meminta bundel aplikasi file path Books.plist dan menggunakannya untuk memuat isi dari Books.plist ke dalam sebuah array yang bernama penulis. Kami kemudian iterate melalui array penulis dan menambahkan buku setiap penulis ke array bisa berubah yang kita buat sebelumnya. Untuk mengurutkan array buku, kami membuat semacam Deskripsi dengan kunci dari judul. Setelah kami sort buku-buku dengan judul, array baru diciptakan, hasil, dengan penyortiran array bisa berubah menggunakan Deskripsi semacam. Kita kembali daftar diurutkan buku.

Semacam deskriptor, contoh NSSortDescriptor, yang digunakan untuk menyortir koleksi objek, seperti array, dengan menentukan properti yang harus digunakan untuk membandingkan dua objek koleksi. Anda dapat dengan aman mengabaikan bagian ini pelaksanaan extractBooks jika itu tidak sepenuhnya jelas, karena hal ini tidak penting dalam lingkup pelajaran ini.

Implementasi metode protokol UITableViewDataSource ini sangat mirip dengan apa yang kita lihat sebelumnya dalam seri ini. Luangkan waktu untuk memeriksa pelaksanaan setiap metode di bawah ini.

Seperti yang kita lihat dalam pelajaran pada tabel views, kita perlu menyatakan pengenal kembali sel dan kita juga perlu untuk mendaftar kelas pengenal kembali sel.

Dengan kelas controller pandangan baru yang siap untuk digunakan, kembali ke jalan cerita, menyeret sebuah instance UITableViewController dari Object Library, dan set kelas untuk TSPAllBooksViewController. Dengan tampilan tabel yang dipilih, menetapkan jumlah sel-sel prototipe untuk 0 di Inspektur atribut. Sebelum Anda menjalankan aplikasi di iOS Simulator, membuat hubungan Suci segue antara tab bar controller dan Lihat tabel controller kami hanya menambahkan.

Membangun dan menjalankan proyek untuk melihat hasil dari kerja keras kami. Jika Anda memiliki mata untuk detail, Anda mungkin telah memperhatikan bahwa judul tab keempat hanya muncul setelah tab yang dipilih. Dapatkah kamu menebak mengapa?


Lihat apakah... Tidak beban

Penyebab permainan kata-kata aneh ini sebenarnya cukup sederhana. Secara umum, pandangan tidak dimuat ke memori sampai benar-benar perlu. Ini biasanya berarti bahwa pandangan load ke memori ketika itu tentang akan ditampilkan kepada pengguna.

Ketika aplikasi tab Perpustakaan diluncurkan, tab pertama yang dipilih secara default. Selama tab keempat tidak dipilih — oleh pengguna atau pemrograman-tidak perlu untuk memuat tampilan controller Lihat keempat. Sebagai akibatnya, metode viewDidLoad tidak disebut sampai tab keempat dipilih, yang pada gilirannya berarti bahwa judul tidak diatur sampai tab keempat yang dipilih.

Solusinya sederhana. Pendekatan yang lebih baik adalah untuk menetapkan judul tampilan controller ketika tampilan controller diinisialisasi. Jika kita menetapkan judul di metode init kelas, kita dapat yakin bahwa judul tampilan controller diatur dalam waktu.

Buka TSPAllBooksViewController.m dan tambahkan sebuah metode bernama initWithCoder: seperti yang ditunjukkan di bawah ini. Metode ini dipanggil oleh sistem operasi untuk membuat sebuah instance kelas.

Ini adalah waktu yang baik untuk memeriksa aliran khas init metode. Metode inisialisasi biasanya dimulai dengan sebuah panggilan ke metode init superclass, di caseinitWithCoder ini:. Saya menekankan mengapa hal ini penting ketika kita membahas theviewDidLoad metode sebelumnya dalam seri ini. Hasil dari [super initWithCoder:aDecoder] ditugaskan untuk diri sendiri, contoh kelas kami bekerja dengan.

Pada langkah berikutnya, kami memverifikasi bahwa diri tidak nil. Jika diri diatur — tidak nil — saatnya untuk lebih lanjut mengkonfigurasi contoh kelas, diri. Metode inisialisasi selalu harus mengembalikan instance kelas atau nol jika sesuatu yang tidak beres.

Dalam jika pernyataan dalam initWithCoder: kita mengatur properti title Lihat controller untuk memecahkan masalah saya membahas beberapa saat yang lalu.

Itu banyak teori untuk memperbaiki masalah sepele. Namun, penjelasan di atas adalah pengenalan yang baik untuk elemen penting lainnya dari tab bar controller, tab bar item. Saat ini, tab dari tab bar hanya menampilkan judul tampilan controller atau, dalam kasus kedua dan ketiga vier controller, gelar default item. Dalam sebagian besar aplikasi, tab juga menunjukkan sebuah ikon kecil yang mengisyaratkan fungsi atau tujuan controller lihat di bawah tab. Mari kita lihat bagaimana menerapkan ini.


Bilah tab item

Dalam pelajaran sebelumnya, saya menulis bahwa setiap tampilan controller pada tumpukan navigasi membuat referensi ke pengontrol navigasi mengelola stack. Hal yang sama juga berlaku untuk lihat controller yang dikelola oleh tab bar controller. Kontroler view yang dikelola oleh tab bar controller membuat referensi ke tab bar controller di properti baru tabBarController.

Selain sifat-sifat ini, lihat controller juga memiliki properti tabBarItem, contoh yang unik dari kelas UITabBarItem. Properti ini digunakan ketika tampilan controller adalah anak dari tab bar controller. Item bar tab yang memiliki gelar, gambar dan tag. Tag adalah hanya bilangan bulat yang dapat digunakan untuk mengidentifikasi item bar tab dalam bilah tab. Secara default, tab bar judul barang yang merupakan warisan dari properti judul tampilan controller, itulah sebabnya tab pertama dan terakhir dalam tab Perpustakaan aplikasi beruang judul mereka masing-masing tampilan controller.

Buka TSPAuthorsViewController.m dan tambahkan sebuah metode bernama initWithCoder: seperti yang ditunjukkan di bawah ini.

Kami menciptakan sebuah tab bar item dan menetapkannya ke tampilan controller tabBarItem properti. Initializer kelas UITabBarItem menerima gelar (NSString), gambar (UIImage) dan tag (NSInteger). Sebelum membangun dan menjalankan proyek, men-download file sumber pelajaran ini dan menyeret ikon-authors.png dan [email protected] ke dalam proyek Anda. Seperti Anda mungkin ingat, file dengan @2 x akhiran target perangkat dengan layar retina, sedangkan file tanpa @2 x akhiran target non-retina perangkat.

Perhatikan bahwa tidak perlu menentukan ekstensi file dari file gambar dengan menggunakan imageNamed metode kelas: dari UIImage. Secara umum, Anda tidak perlu menetapkan apa versi file-retina atau non-retina — untuk menggunakan. Berdasarkan nama file dan perangkat keras, sistem operasi memutuskan versi yang menggunakan.

Saya juga telah pindah penetapan judul ke initWithCoder: metode seperti yang kita lakukan di kelas TSPAllBooksViewController. Jalankan aplikasi sekali lagi untuk melihat hasil.

Kita dapat melakukan hal yang sama untuk kelas TSPAllBooksViewController. Buka MTAllBooksViewController.m dan memperbarui initWithCoder: metode seperti ditunjukkan di bawah.

Selain pengaturan tampilan controller judul, kita mengatur properti tabBarItem. Namun, kali ini kita membuat menggunakan initWithTabBarSystemItem:tag: untuk mengkonfigurasi tab bar item. Anda dapat menggunakan metode ini jika Anda ingin menggunakan sistem disediakan tab bar item. Argumen pertama dari metode ini, UITabBarSystemItem, menentukan judul dan gambar tab bar item.

Hal ini juga memungkinkan untuk memberikan item yang bar tab nilai lencana seperti yang ditunjukkan di atas pelaksanaan initWithCoder:. Nilai lencana ini diharapkan akan NSString instance.

Ketika bekerja dengan tab bar controller, perlu diingat bahwa akar Lihat controller dari setiap tab yang menentukan tampilan item bar tab tab masing-masing. Misalnya, tab bar controller mengelola kontroler navigasi dengan jumlah tampilan controller, Apakah tab bar item pengontrol navigasi akar view controller yang digunakan oleh bar controller Bilah tab tab. Kelas UITabBarItem memiliki beberapa metode lain untuk lebih lanjut menyesuaikan tampilan dan nuansa tab bar item.


Lebih View Controller

Sebelum mengakhiri artikel ini, saya ingin menunjukkan Anda bagaimana Bilah tab terlihat ketika tab bar controller mengatur lebih dari lima Lihat controller. Seperti saya sebutkan sebelumnya, hanya lima tab ditampilkan pada satu waktu, tapi tab bar controller menyediakan dukungan untuk mengelola lebih dari lima anak lihat controller.

Buka storyboard utama dan menambahkan dua kasus lebih dari UITableViewController. Menciptakan hubungan yang suci segue untuk setiap tabel tampilan controller dan menjalankan aplikasi di iOS Simulator untuk melihat hasil.

Pengendali tambahan pemandangan yang kami menambahkan tidak berguna, tetapi mereka menunjukkan bagaimana kontroler bar tab mengelola lebih dari lima anak lihat controller. Bar controller memberikan akses ke controller kelima dan keenam pandangan controller bar tab tab. Pengguna bahkan yang diberikan kemampuan untuk mengedit posisi controller lihat di Bilah tab.


Kesimpulan

Hal ini penting untuk memahami bahwa UITabBarController dan UINavigationController kelas masing-masing mewakili sebuah paradigma antarmuka pengguna yang unik. Artikel ini juga menunjukkan bahwa tab bar controller tidak sulit untuk menguasai setelah Anda memahami komponen-komponen yang terlibat.

Dalam artikel berikutnya, kami akan mengambil melihat data kekal pada iOS dan pilihan yang Anda miliki sebagai seorang pengembang.

Advertisement
Did you find this post useful?
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.