Bagaimana Anda menambahkan tindakan ke tombol secara terprogram di xcode


105

Saya tahu cara menambahkan IBAction ke tombol dengan menyeret dari pembuat antarmuka, tetapi saya ingin menambahkan tindakan secara terprogram untuk menghemat waktu dan menghindari bolak-balik terus-menerus. Solusinya mungkin sangat sederhana, tetapi saya sepertinya tidak dapat menemukan jawaban saat mencarinya. Terima kasih!

Jawaban:


222

Coba ini:

Cepat 4

myButton.addTarget(self,
                   action: #selector(myAction),
                   for: .touchUpInside)

Objective-C

[myButton addTarget:self 
             action:@selector(myAction) 
   forControlEvents:UIControlEventTouchUpInside];

Anda dapat menemukan sumber informasi yang kaya di Dokumentasi Apple. Lihatlah dokumentasi UIButton , itu akan mengungkapkan bahwa UIButton adalah turunan dari UIControl, yang mengimplementasikan metode untuk menambahkan target .

-

Anda harus memperhatikan apakah menambahkan titik dua atau tidak setelah myActionin action:@selector(myAction)

Berikut referensinya .


Bagaimana jika saya ingin meneruskan parameter ke selektor saat tombol saya ditekan (misalnya, saya memiliki tombol di dalam UITableViewCell dan saya ingin meneruskan objek di sel tersebut saat tombol sel ditekan)?
acecapades

1
@acecapades Saya pikir Anda mencampur dua hal. Anda tidak dapat memasang parameter seperti yang dapat Anda lakukan dengan performSelector. Pola tindakan yang digunakan oleh UIControl turunan UIButton adalah untuk memberi tahu beberapa target dengan selektor tertentu ketika controlEvent dipicu. Ketika ini terjadi dalam kasus Anda, Anda dapat naik tampilan super untuk melihat siapa yang merangkum tombol Anda dan meminta metode untuk menyelesaikan tablecell untuk memodelkan hubungan dan kemudian melakukan apa pun yang Anda inginkan dengan itu.
Nick Weaver

1
Saya melihat. Itu masuk akal. Saya rasa saya mengerti apa yang Anda katakan. Terima kasih atas tipnya Nick!
acecapades

dapatkah seseorang menerjemahkan ini dengan cepat?

23

Jawaban cepat:

myButton.addTarget(self, action: "click:", for: .touchUpInside)

func click(sender: UIButton) {
    print("click")
}

Dokumentasi: https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget


Apa arti ":" setelah "klik" dalam panggilan ke UIControl.addTarget?
dumbledad

1
Penyeleksi memiliki :sebagai tempat penampung untuk argumen fungsi. Karena clickmengambil senderargumen, itu diganti dengan a :di string pemilih.
Etan

Ini baru-baru ini berfungsi untuk saya untuk Swift 3. button.addTarget (self, action: #selector (ViewController.click), untuk: UIControlEvents.touchUpInside) func click () {print ("click")} Terima kasih @Glauco Neves karena telah mengarahkan kami menyusuri jalur yang benar
uplearnedu.com

14
CGRect buttonFrame = CGRectMake( 10, 80, 100, 30 );
        UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];
        [button setTitle: @"My Button" forState: UIControlStateNormal];
        [button addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
        [button setTitleColor: [UIColor redColor] forState: UIControlStateNormal];
[view addSubview:button];

apakah mungkin menambahkan 2 tindakan atau lebih?
ErasmoOliveira

9

coba ini:

pertama tulis ini di file .h viewcontroller

UIButton *btn;

Sekarang tulis ini di file .m viewcontrollers viewDidLoad.

btn=[[UIButton alloc]initWithFrame:CGRectMake(50, 20, 30, 30)];
[btn setBackgroundColor:[UIColor orangeColor]];
//adding action programatically
[btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];

tulis metode viewDidLoad luar ini di file .m pengontrol tampilan Anda

- (IBAction)btnClicked:(id)sender
{
   //Write a code you want to execute on buttons click event
}

8
 CGRect buttonFrame = CGRectMake( x-pos, y-pos, width, height );   //
 CGRectMake(10,5,10,10) 

 UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];

 button setTitle: @"My Button" forState: UIControlStateNormal];

 [button addTarget:self action:@selector(btnClicked:) 
 forControlEvents:UIControlEventTouchUpInside];

 [button setTitleColor: [UIColor BlueVolor] forState:
 UIControlStateNormal];

 [view addSubview:button];




 -(void)btnClicked {
    // your code }

6

Untuk Swift 3

Buat fungsi untuk aksi tombol terlebih dahulu lalu tambahkan fungsi tersebut ke target tombol Anda

func buttonAction(sender: UIButton!) {
    print("Button tapped")
}

button.addTarget(self, action: #selector(buttonAction),for: .touchUpInside)

3
UIButton *btnNotification=[UIButton buttonWithType:UIButtonTypeCustom];
btnNotification.frame=CGRectMake(130,80,120,40);
btnNotification.backgroundColor=[UIColor greenColor];
[btnNotification setTitle:@"create Notification" forState:UIControlStateNormal];
[btnNotification addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnNotification];


}

-(void)btnClicked
{
    // Here You can write functionality 

}

berikan beberapa komentar yang menjelaskan bagaimana sampel Anda dapat membantu.
Nogard

UIButton * btnNotification = [UIButton buttonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Pengaturan Bingkai Tombol btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Tetapkan judul untuk tombol [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; // tambahkan Target Untuk tombol [self.view addSubview: btnNotification];} - (void) btnClicked {// Di sini Anda dapat menulis fungsionalitas}
user2677311

- (void) btnClicked {// di sini apa pun yang Anda inginkan, Anda dapat menyetel tindakan untuk tombol // Contoh: lanjutkan ke viewcontroller berikutnya nextviewController * nextPage = [nextviewController alokasi] init]; [self.navigationController pushviewcontroller: animasi nextPage: YES]; }
pengguna2677311

2

UIButtonmewarisi dari UIControl. Itu memiliki semua metode untuk menambah / menghapus tindakan: Referensi Kelas UIControl . Lihatlah bagian "Mempersiapkan dan Mengirim Pesan Tindakan", yang meliputi – sendAction:to:forEvent:dan – addTarget:action:forControlEvents:.


1
 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(aMethod1:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];   
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.