Acara klik tombol pemrograman?


126

Apakah ada cara untuk memrogram acara klik tombol secara terprogram? Saya memiliki tombol yang ditempatkan di sana dalam UIView, dan dalam skenario tertentu saya ingin mengklik tombol melalui kode, bukan secara manual sebagai pengguna. Apakah mungkin dalam pengembangan iOS? Harap berikan saran Anda dan bimbing saya cara melakukannya.

Terima kasih.

Jawaban:


313

Agak seperti jawaban Ken, tetapi lebih fleksibel karena akan melacak tombol tindakan yang sebenarnya jika Anda mengubahnya atau menambahkan lebih dari satu.

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8
Apakah ini menyorot tombol jika button.showsTouchWhenHighlighted = YESsuka dengan sentuhan yang sebenarnya?
chown

2
Jawaban ini sangat bagus b / c dapat dengan mudah diterjemahkan ke kontrol lain seperti UISwitch (UIControlEventValueChanged) dan dalam kasus saya jauh lebih baik daripada memanggil target / kode tindakan langsung b / c Saya ingin saklar untuk beralih! Terima kasih.
John Erck

Tidak itu tidak menyoroti tombol jika button.showsTouchWhenHighlighted = YES. ; (
Richie Hyatt

7
jika Anda memerlukan highlight Anda bisa melakukan ini. [tombol disetel Sorotan: YA]; [tombol sendActionsForControlEvents: UIControlEventTouchUpInside]; [tombol disetel Sorotan: TIDAK]; dan itu bekerja dengan baik. -rrh
Richie Hyatt

Halo @ Zaky, jika saya hanya ingin animasi, tanpa mengirim tindakan, bagaimana saya bisa melakukannya?
benhi

13

Saya memiliki masalah yang sama seperti di atas. Saya akan memposting komentar, tetapi reputasi saya tidak cukup tinggi. Jadi, saya malah akan memposting jawaban lengkap:

[btn setHighlighted:YES];
[btn sendActionsForControlEvents:UIControlEventTouchUpInside];
[btn performSelector:@selector(setHighlighted:) withObject:NO afterDelay:0.25];

Ini secara terprogram akan menekan tombol dan menyorotnya untuk waktu yang tampaknya normal. Saran Richie tidak berfungsi karena tombolnya hanya disorot (jika ada) untuk waktu yang tidak terlihat.


Itu tidak disorot, menggambar hanya terjadi setelah potongan kode saat ini selesai dieksekusi. Ini adalah perbaikan yang bagus.
mattsven

6

Mengapa tidak hanya mengeksekusi kode yang dieksekusi ketika pengguna menekan tombol?

-(void)myMethod
{
   // do stuff
}

-(IBAction)myButtonClick:(id)sender
{
    [self myMethod];
}

-(void)clickMyButton
{
    [self myMethod];
    // OR
    [self myButtonClick:nil];
}

Tidak, persyaratan saya bukan memanggil metode, cara menyalakan acara klik tombol secara terprogram, bukan kapan pengguna mengkliknya secara manual. Saya membuat UIButton secara terprogram dalam sebuah UIView, saya ingin menjalankan event klik tombol secara otomatis setelah interval waktu tertentu melalui program itu sendiri, bukan oleh pengguna.
Getsy

Maka tidak mungkin tanpa mensintesiskan sentuhan. Lihat cocoawithlove.com/2008/10/… . Namun, Anda tidak dapat mengirimkan aplikasi ke App Store menggunakan metode ini, karena menggunakan API pribadi. Biasanya digunakan untuk tujuan debugging.
Evan Mulawski

Anda tidak menjelaskan mengapa Anda perlu mensimulasikan sentuhan vs hanya memanggil metode tetapi sejauh ini cara termudah untuk pergi. Tindakan pengatur waktu Anda dapat memanggil metode apa pun yang Anda inginkan dan metode yang dipanggil dapat memberikan umpan balik di UI bahwa tombol sedang ditekan dengan mengubah status tombol (dipilih, disorot, dll.). Jika itu tidak berhasil, baiklah.
XJones

1

Jika Anda berbicara tentang UIButton, Anda bisa memanggil metode yang sama dengan panggilan UIButton saat disadap. Sebagai contoh:

[self myButtonsTargetMethod];

Tidak, persyaratan saya bukan memanggil metode, cara menyalakan acara klik tombol secara terprogram, bukan kapan pengguna mengkliknya secara manual. Saya membuat UIButton secara terprogram dalam sebuah UIView, saya ingin menjalankan event klik tombol secara otomatis setelah interval waktu tertentu melalui program itu sendiri, bukan oleh pengguna.
Getsy

1

Iya,

[_button setHighlighted:YES];
[_button sendActionsForControlEvents:UIControlEventTouchUpInside];
[_button setHighlighted:NO];

Tetapi masalahnya di sini adalah Anda tidak akan dapat melihat acara tersebut karena terlalu cepat. jadi yang dapat Anda lakukan adalah mencoba kode di atas dengan NSTimer.

NSTimer *quick = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(MeFirst:) userInfo:nil repeats:NO];

MeFirst adalah metode yang saya buat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.