Làm cách nào để bạn thêm một hành động vào một nút theo chương trình trong xcode


105

Tôi biết cách thêm IBAction vào một nút bằng cách kéo từ trình tạo giao diện, nhưng tôi muốn thêm hành động theo chương trình để tiết kiệm thời gian và tránh chuyển đổi qua lại liên tục. Giải pháp có lẽ thực sự đơn giản, nhưng tôi dường như không thể tìm thấy bất kỳ câu trả lời nào khi tôi tìm kiếm nó. Cảm ơn bạn!

Câu trả lời:


222

Thử cái này:

Swift 4

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

Objective-C

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

Bạn có thể tìm thấy một nguồn thông tin phong phú trong Tài liệu của Apple. Hãy xem tài liệu của UIButton , nó sẽ tiết lộ rằng UIButton là hậu duệ của UIControl, nó thực hiện phương pháp để thêm mục tiêu .

-

Bạn sẽ cần phải chú ý đến việc add thư đại tràng hay không sau myActiontrong action:@selector(myAction)

Đây là tài liệu tham khảo .


Điều gì sẽ xảy ra nếu tôi muốn truyền một tham số cho bộ chọn khi nút của tôi được nhấn (ví dụ: tôi có một nút bên trong UITableViewCell và tôi muốn chuyển đối tượng trong ô đó khi nút của ô được nhấn)?
acecapades

1
@acecapades Tôi nghĩ bạn đang trộn lẫn hai thứ. Bạn không thể gắn paramater như bạn có thể làm với performanceSelector. Mẫu hành động được sử dụng bởi UIButton hậu duệ của UIControl là thông báo cho một số mục tiêu với một bộ chọn nhất định khi controlEvent được kích hoạt. Khi điều này xảy ra trong trường hợp của bạn, bạn có thể lên superviews để xem ai đang đóng gói nút của bạn và yêu cầu một phương pháp giải quyết mối quan hệ giữa tablecell thành mô hình và sau đó làm bất cứ điều gì bạn muốn với điều đó.
Nick Weaver

1
Tôi hiểu rồi. Điều đó có lý. Tôi nghĩ tôi hiểu những gì bạn đang nói. Cảm ơn vì mẹo Nick!
acecapades

ai đó có thể dịch nó một cách nhanh chóng?

23

Câu trả lời nhanh chóng:

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

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

Tài liệu: https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget


Dấu ":" sau khi "nhấp" trong lệnh gọi tới UIControl.addTarget là gì?
câm

1
Các bộ chọn có một :chỗ dành sẵn cho các đối số của hàm. Vì clicklấy senderđối số, đối số đó được thay thế bằng một :trong chuỗi bộ chọn.
Etan

Tính năng này gần đây đã hoạt động đối với tôi đối với Swift 3. button.addTarget (self, action: #selector (ViewController.click), for: UIControlEvents.touchUpInside) func click () {print ("click")} Cảm ơn @Glauco Neves đã chỉ cho chúng tôi xuống đi đúng hướng
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];

có thể thêm 2 hoặc nhiều hành động không?
ErasmoOliveira

9

thử cái này:

trước tiên hãy ghi điều này vào tệp .h của bộ điều khiển chế độ xem của bạn

UIButton *btn;

Bây giờ hãy ghi điều này vào tệp .m của 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];

ghi phương thức viewDidLoad bên ngoài này vào tệp .m của bộ điều khiển chế độ xem của bạn

- (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

Đối với Swift 3

Trước tiên, hãy tạo một chức năng cho hành động của nút và sau đó thêm chức năng vào mục tiêu nút của bạn

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 

}

vui lòng cung cấp một số nhận xét giải thích cách mẫu của bạn có thể giúp ích.
Nogard

UIButton * btnNotification = [UIButton buttonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Cài đặt khung nút btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Đặt tiêu đề cho nút [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouubchUpInside]; // thêm nút Target For [self -view.view addS btnNotification];} - (void) btnClicked {// Ở đây Bạn có thể viết chức năng}
user2677311

- (void) btnClicked {// ở đây những gì bạn muốn bạn có thể đặt hành động cho nút // Ví dụ: đi tới viewcontroller tiếp theo nextviewController * nextPage = [nextviewController CẤP] init]; [self.navigationController pushviewcontroller: nextPage animation: YES]; }
user2677311

2

UIButtonkế thừa từ UIControl. Điều đó có tất cả các phương pháp để thêm / xóa các hành động: Tham chiếu lớp UIControl . Xem phần "Chuẩn bị và Gửi Thông báo Hành động", phần này bao gồm – sendAction:to:forEvent:– 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];   
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.