Edit
Sekarang sudah diperbaiki ios7.1
Jangan lakukan tweak apapun untuk memperbaikinya.
Edit2
Ternyata masalah yang sama terjadi lagi di iOS 8.0 dan 8.1
Edit3
Sekarang sudah diperbaiki ios9.2
Jangan lakukan tweak apapun untuk memperbaikinya.
Hai Hari ini saya melihat di UISwitch's
Event ValueChanged:
Calling continuously
saat saya mengubah On
ke Off
atau Off
ke On dan jari saya masih digerakkan di sisi kanan dan kiri. Saya menggunakan gambar GIF agar lebih jelas dengan NSLog.
Metode Perubahan Nilai Saya adalah:
- (IBAction)changeSwitch:(id)sender{
if([sender isOn]){
NSLog(@"Switch is ON");
} else{
NSLog(@"Switch is OFF");
}
}
iOS6 kode yang sama dari Switch berfungsi dengan baik seperti yang kami harapkan:
jadi siapa pun bisa menyarankan saya panggilan itu hanya satu kali keadaannya Hidup atau mati. atau apakah ini bug atau apa ..?
MEMPERBARUI
Ini dia Demo saya:
Jawaban:
Silakan lihat kode berikut:
sumber
Bug yang sama di sini. Saya rasa saya telah menemukan solusi sederhana. Kita hanya perlu menggunakan new
BOOL
yang menyimpan status sebelumnya dariUISwitch
dan pernyataan if diIBAction
(Value Changed dipecat) untuk memeriksa bahwa nilai switch benar-benar berubah.Tidak ada lagi perilaku aneh. Semoga membantu.
sumber
Anda dapat menggunakan
UISwitch
's.selected
properti untuk memastikan kode Anda hanya mengeksekusi sekali ketika nilai perubahan yang sebenarnya. Saya rasa ini adalah solusi yang bagus karena menghindari subclass atau menambahkan properti baru.Dan ini dia di Swift:
sumber
Jika Anda menggunakan begitu banyak sakelar di aplikasi Anda, maka ada masalah untuk mengubah kode di semua tempat di mana metode t tindakan UISwitch didefinisikan. Anda dapat membuat sakelar khusus dan menangani kejadian hanya jika nilainya berubah.
CustomSwitch.h
CustomSwitch.m
Kami mengabaikan peristiwa jika nilainya sama dengan nilai yang diubah.Tempatkan CustomSwitch di semua kelas UISwitch di storyboard Ini akan menyelesaikan masalah dan memanggil target hanya sekali ketika nilai berubah
sumber
Saya mendapat banyak pengguna yang menghadapi masalah yang sama jadi mungkin ini adalah bug
UISwitch
jadi saya baru saja menemukan untuk solusi sementara. Saya menemukan satu penggunaangitHub
khususKLSwitch
ini untuk saat ini berharap apel akan memperbaikinya di pembaruan xCode berikutnya: -https://github.com/KieranLafferty/KLSwitch
sumber
Jika Anda tidak perlu bereaksi secara instan terhadap perubahan nilai sakelar, berikut ini bisa menjadi solusi:
sumber
Masalah ini masih ada di iOS 9.3 beta. Jika Anda tidak keberatan pengguna tidak dapat menyeret di luar sakelar, saya menemukan bahwa menggunakan
.TouchUpInside
daripada.ValueChanged
bekerja dengan andal.sumber
Saya masih menghadapi masalah yang sama di iOS 9.2
Saya mendapat solusi dan berpura-pura karena dapat membantu orang lain
Buat variabel hitung untuk melacak berapa kali metode mendapat panggilan
Simpan nilai bool untuk nilai sakelar
Dalam metode perubahan nilai Switch lakukan tindakan keinginan hanya untuk pemanggilan metode pertama. Ketika nilai sakelar berubah lagi setel nilai hitungan dan nilai variabel bool ke default
sumber
Masalah ini mengganggu saya ketika saya mengikat peralihan ke perilaku lain. Umumnya hal-hal tidak suka berubah dari
on
menjadion
. Inilah solusi sederhana saya:Pastikan juga untuk mengatur
self.lastSwitchState
setiap kali Anda mengubah secara manualmySwitch.on
! :)sumber
Jenis masalah ini sering kali disebabkan oleh ValueChanged. Anda tidak perlu menekan tombol untuk menjalankan fungsi. Ini bukan acara sentuh. Setiap kali Anda secara terprogram mengubah sakelar ke on / off, nilainya berubah dan memanggil fungsi IBAction lagi.
@RoNiT memiliki jawaban yang benar dengan:
Cepat
sumber
Ini berfungsi dengan baik dan tidak memanggil fungsi pemilih lagi.
sumber
Ini berhasil untuk saya.
sumber