Saya membuat toolbar di IB dengan beberapa tombol. Saya ingin dapat menyembunyikan / menampilkan salah satu tombol tergantung pada keadaan data di jendela utama.
UIBarButtonItem
tidak memiliki properti tersembunyi, dan contoh apa pun yang saya temukan sejauh ini untuk menyembunyikannya melibatkan pengaturan tombol nav bar hingga nil, yang menurut saya tidak ingin saya lakukan di sini karena saya mungkin perlu menunjukkan tombol itu lagi (tidak untuk menyebutkan itu, jika saya menghubungkan tombol saya ke IBOutlet, jika saya setel ke nil saya tidak yakin bagaimana saya mendapatkannya kembali).
ios
uibarbuttonitem
uitoolbar
Sasha
sumber
sumber
Jawaban:
Simpan tombol Anda di outlet yang kuat (sebut saja
myButton
) dan lakukan ini untuk menambah / menghapusnya:Karena disimpan di outlet, Anda akan tetap referensi meskipun tidak ada di toolbar.
sumber
Saya tahu jawaban ini terlambat untuk pertanyaan ini. Namun, mungkin membantu jika ada orang lain yang menghadapi situasi serupa.
Di iOS 7, untuk menyembunyikan item tombol bilah, kita dapat menggunakan dua teknik berikut: -
SetTitleTextAttributes
: - Ini berfungsi baik pada item tombol bilah seperti "Selesai", "Simpan" dll. Namun, ini tidak berfungsi pada item seperti Tambah, simbol Sampah dll (minimal bukan untuk saya) karena mereka bukan teks.TintColor
: - Jika saya memiliki item tombol bilah yang disebut "deleteButton": -Untuk menyembunyikan tombol, saya menggunakan kode berikut: -
Untuk menunjukkan tombol lagi saya menggunakan kode berikut: -
sumber
deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()
untuk menonaktifkan dan menyembunyikan, dandeleteButton.enabled = true; deleteButton.tintColor = nil
untuk mengaktifkan kembali dan tampil seperti biasa.UIColor.clear
untukUIControlState.disabled
dan dapat menampilkan / menyembunyikan tombol dengansetEnabled
. Tentu saja seperti yang Anda nyatakan, ini hanya berfungsi untuk tombol teks.Inilah pendekatan sederhana:
Saya hanya menjalankannya di retina iPad saya, dan 0,01 cukup kecil untuk tidak muncul.
sumber
self.window?.tintColor = APP_PRIMARY_COLOR
di appdelegate, maka ini tidak akan berfungsiDimungkinkan untuk menyembunyikan tombol di tempatnya tanpa mengubah lebarnya atau melepasnya dari bilah. Jika Anda mengatur gaya ke polos, menghapus judul, dan menonaktifkan tombol, itu akan hilang. Untuk mengembalikannya, balikkan perubahan Anda.
sumber
Di bawah ini adalah solusi saya meskipun saya sedang mencari Bar Navigasi.
Di sini "navBar" adalah IBOutlet ke NavigationBar dalam tampilan di XIB Di sini saya ingin menyembunyikan tombol atau menunjukkannya berdasarkan kondisi tertentu. Jadi saya sedang menguji untuk kondisi di "Jika" dan jika benar saya mengatur tombol untuk nil dalam metode viewDidLoad dari tampilan target.
Ini mungkin tidak relevan dengan masalah Anda dengan tepat tetapi sesuatu yang mirip jika Anda ingin menyembunyikan tombol di NavigationBar
sumber
rightBarButtonItem
lagi nanti , pastikan item tombol disimpan dalam IBOutlet yang kuat sehingga tidak dilepaskan ketika Anda melepasnya dari bilah navigasi.Untuk Swift 3 dan Swift 4 Anda dapat melakukan ini untuk menyembunyikan
UIBarButtomItem
:Dan untuk menunjukkan
UIBarButtonItem
:Pada
tintColor
Anda harus menentukan warna asal yang Anda gunakan untukUIBarButtomItem
sumber
Saat ini saya menjalankan OS X Yosemite Developer Preview 7 dan Xcode 6 beta 6 yang menargetkan iOS 7.1 dan solusi berikut berfungsi dengan baik untuk saya:
UINavigationItem
danUIBarButtonItem
sJalankan kode berikut untuk menghapus
Jalankan kode berikut untuk menambahkan tombol lagi
sumber
Saya menggunakan IBOutlets dalam proyek saya. Jadi solusi saya adalah:
Dan ketika Anda harus menunjukkan bilah ini lagi, cukup atur properti yang dibalik.
Di Swift 3 sebagai gantinya
enable
gunakanisEnable
properti.sumber
self.dismissButton.customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
sumber
iOS 8. UIBarButtonItem dengan gambar khusus. Mencoba berbagai cara, kebanyakan dari mereka tidak membantu. Solusi Max,
setTintColor
itu tidak berubah menjadi warna apa pun. Saya menemukan yang ini sendiri, berpikir itu akan berguna bagi seseorang.Untuk Menyembunyikan:
Untuk Menunjukkan:
sumber
Coba di Swift , jangan perbarui
tintColor
jika Anda memiliki beberapa desain untuk UIBarButtonItem Anda seperti ukuran font di AppDelegate, itu benar-benar akan mengubah tampilan tombol Anda saat muncul.Dalam hal tombol teks, mengubah judul dapat membiarkan tombol Anda 'menghilang'.
sumber
Saya menemukan kerut lain dalam
tintColor
danisEnabled
pendekatan yang disarankan oleh Max dan lain-lain - ketika VoiceOver diaktifkan untuk aksesibilitas dan tombol tersebut secara logis tersembunyi, kursor aksesibilitas masih akan fokus pada tombol bar, dan menyatakan bahwa itu adalah "redup" (yaitu karenaisEnabled
is set ke false). Pendekatan dalam jawaban yang diterima tidak menderita efek samping ini, tetapi pekerjaan lain di sekitar saya temukan adalahisAccessibilityElement
salah ketika "menyembunyikan" tombol:Dan kemudian mengatur
isAccessibilityElement
kembali ke true ketika "menunjukkan" tombol:Memiliki item tombol bilah masih memakan ruang bukan masalah dalam kasus saya, karena kami menyembunyikan / menampilkan item tombol bilah kanan paling kiri.
sumber
Dan sekarang cukup ganti
isHidden
properti.sumber
Meningkatkan Dari jawaban @ lnafziger
Simpan Barbuttons Anda di outlet yang kuat dan lakukan ini untuk menyembunyikan / menampilkannya:
Kapan pun diperlukan, gunakan Fungsi di bawah ini ..
sumber
Atur
barButton.customView = UIView()
dan lihat Trick-nyasumber
Tidak ada cara untuk "menyembunyikan" UIBarButtonItem, Anda harus menghapusnya dari superView dan menambahkannya kembali saat Anda ingin menampilkannya lagi.
sumber
Ini jauh di bawah daftar jawaban, tetapi untuk berjaga-jaga jika seseorang menginginkan copy dan paste yang mudah untuk solusi cepat, ini dia
sumber
Salah satu cara untuk melakukannya adalah menggunakan
initWithCustomView:(UIView *)
properti ketika mengalokasikanUIBarButtonItem
. Subclass untukUIView
akan memiliki properti sembunyikan / tidak terlihat.Sebagai contoh:
1. Memiliki
UIButton
yang ingin Anda sembunyikan / sembunyikan.2. Jadikan
UIButton
sebagai tampilan khusus. Suka :3. Anda dapat menyembunyikan / menyembunyikan menyembunyikan yang
myButton
telah Anda buat.[myButton setHidden:YES];
sumber
Untuk versi Swift, berikut ini kodenya:
Untuk
UINavigationBar
:sumber
Mengatur warna teks ke warna yang jelas saat item tombol bilah dinonaktifkan mungkin merupakan opsi yang lebih bersih. Tidak ada keanehan yang harus Anda jelaskan dalam komentar. Anda juga tidak merusak tombol sehingga Anda masih menyimpan segues storyboard terkait.
Lalu kapan pun Anda ingin item tombol bilah disembunyikan, Anda bisa melakukannya:
Itu tidak ada properti tersembunyi tetapi ini menawarkan hasil yang sama.
sumber
Jika UIBarButtonItem memiliki gambar alih-alih teks di dalamnya, Anda dapat melakukan ini untuk menyembunyikannya:
navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;
sumber
Beberapa metode pembantu yang saya pikir saya akan bagikan berdasarkan jawaban yang diterima lnafziger karena saya memiliki beberapa bilah alat dan beberapa tombol di masing-masing:
sumber
Anda dapat dengan mudah mendapatkan tampilan dan menyembunyikannya dengan cara ini
sumber
Jika Anda menggunakan Swift 3
sumber
Berikut ini adalah ekstensi yang akan menangani ini.
PEMAKAIAN:
sumber
Melengkapi respons Eli Burke, jika Anda
UIBarButtonItem
memiliki gambar latar belakang alih-alih judul, Anda dapat menggunakan kode:sumber
Anda perlu memanipulasi array toolbar.items.
Berikut adalah beberapa kode yang saya gunakan untuk menyembunyikan dan menampilkan tombol Selesai. Jika tombol Anda berada di ujung paling atas bilah alat atau di antara tombol-tombol lain, tombol Anda yang lain akan bergerak, jadi jika Anda ingin tombol Anda menghilang begitu saja maka tempatkan tombol Anda sebagai tombol terakhir ke tengah. Saya menghidupkan tombol untuk efek, saya sangat menyukainya.
}
jadi sekarang dapat menggunakan kode berikut untuk menunjukkan tombol Anda
atau untuk menyembunyikan tombol Anda
sumber
Di IB jika Anda membiarkan judul tombol kosong, itu tidak akan muncul (tidak pernah diinisialisasi?). Saya sering melakukan ini selama pengembangan selama pembaruan UI jika saya ingin item tombol bilah hilang untuk pembuatan tanpa menghapusnya dan membuang semua referensi outletnya.
Ini tidak memiliki efek yang sama selama runtime, mengatur judul tombol ke nol tidak akan menyebabkan seluruh tombol menghilang. Maaf tidak benar-benar menjawab pertanyaan Anda, tetapi mungkin bermanfaat bagi sebagian orang.
Sunting: Trik ini hanya berfungsi jika gaya tombol diatur ke polos
sumber
Saya akan menambahkan solusi saya di sini karena saya belum menemukannya disebutkan di sini. Saya memiliki tombol dinamis yang gambarnya tergantung pada status satu kontrol. Solusi paling sederhana bagi saya adalah mengatur gambar
nil
jika kontrol tidak ada. Gambar diperbarui setiap kali kontrol diperbarui dan karenanya, ini optimal untuk saya. Hanya untuk memastikan saya juga mengaturenabled
untukNO
.Mengatur lebar ke nilai minimal tidak berfungsi di iOS 7.
sumber
Dengan kredit ke @lnafziger, @MindSpiker, @vishal, et. Al,
Satu liner paling sederhana yang saya datangi untuk satu tombol bar kanan (atau kiri) adalah:
Seperti dalam:
Saya menguji ini dan itu bekerja untuk saya (dengan item tombol bar yang kuat ditransfer melalui IB).
sumber