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!

aggiesfan64
sumber

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 .

Nick Weaver
sumber
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

Glauco Neves
sumber
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];
Pengembang
sumber
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
}
krushnsinh
sumber
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 }
iOSDeveloper
sumber
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)
SanRam
sumber
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 

}
pengguna2677311
sumber
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:.

odrm
sumber
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];   
Arjun Sa
sumber