xcode에서 프로그래밍 방식으로 버튼에 액션을 추가하는 방법


105

인터페이스 빌더에서 드래그하여 버튼에 IBAction을 추가하는 방법을 알고 있지만 시간을 절약하고 지속적으로 앞뒤로 전환하는 것을 방지하기 위해 작업을 프로그래밍 방식으로 추가하고 싶습니다. 해결책은 아마도 정말 간단 할 것입니다.하지만 검색 할 때 답을 찾을 수없는 것 같습니다. 감사합니다!

답변:


222

이 시도:

스위프트 4

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

목표 -C

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

Apple의 문서에서 풍부한 정보 소스를 찾을 수 있습니다. 상기 봐 가지고 있는 UIButton의 설명서를 , 그것은있는 UIButton가의 후손임을 발표 할 예정이다 UIControl, 할 수있는 방법을 구현하는 목표를 추가하십시오 .

-

콜론 추가 여부에주의를 기울여야합니다 myAction. action:@selector(myAction)

여기에 참조가 있습니다.


버튼을 눌렀을 때 선택기에 매개 변수를 전달하려면 어떻게해야합니까 (예 : UITableViewCell 내부에 버튼이 있고 셀의 버튼을 눌렀을 때 해당 셀의 객체를 전달하려는 경우)?
acecapades 2012 년

1
@acecapades 두 가지를 혼합하고 있다고 생각합니다. performSelector로 할 수있는 것처럼 매개 변수를 첨부 할 수 없습니다. UIControl 하위 UIButton에서 사용하는 작업 패턴은 controlEvent가 트리거 될 때 특정 선택기로 일부 대상에 알리는 것입니다. 귀하의 경우에 이런 일이 발생하면 누가 귀하의 버튼을 캡슐화하고 있는지 확인하고 테이블 셀을 모델 관계로 해결하는 방법을 요청한 다음 원하는 것을 수행하십시오.
닉 위버

1
내가 참조. 말이 되네요. 나는 당신이 말하는 것을 이해한다고 생각합니다. 팁 Nick 주셔서 감사합니다!
acecapades 2012 년

누군가 이것을 신속하게 번역 할 수 있습니까?

23

신속한 답변 :

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

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

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


UIControl.addTarget 호출에서 "클릭"후 ":"는 무엇입니까?
dumbledad

1
선택기에는 :함수 인수에 대한 as 자리 표시자가 있습니다. 인수를 click취 하므로 선택자 문자열에서 sender로 대체됩니다 :.
Etan

이것은 최근에 저에게 Swift 3에서 작동했습니다. button.addTarget (self, action : #selector (ViewController.click), for : UIControlEvents.touchUpInside) func click () {print ( "click")} 우리를 지적 해 주신 @Glauco Neves에게 감사드립니다. 바른 길 아래로
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];

2 개 이상의 액션을 추가 할 수 있습니까?
ErasmoOliveira

9

이 시도:

먼저 viewcontroller의 .h 파일에 작성하십시오.

UIButton *btn;

이제 viewcontrollers viewDidLoad의 .m 파일에 이것을 작성하십시오.

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];

이 외부 viewDidLoad 메서드를 뷰 컨트롤러의 .m 파일에 작성하십시오.

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

Swift 3의 경우

먼저 버튼 동작에 대한 함수를 만든 다음 버튼 대상에 함수를 추가하십시오.

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 

}

샘플이 어떻게 도움이 될 수 있는지 설명하는 몇 가지 의견을 제공하십시오.
Nogard 2013-10-07

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 {// 여기에 기능을 작성할 수 있습니다.}
user2677311 2013 년

-(void) btnClicked {// 여기에서 버튼에 대한 작업을 설정할 수 있습니다. // 예 : 다음 뷰 컨트롤러로 이동 nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller : nextPage animated : YES]; }
user2677311 2013 년

2

UIButton에서 상속 UIControl합니다. 여기에는 작업을 추가 / 제거하는 모든 메서드가 있습니다. UIControl Class Reference . , 커버 "액션 메시지 준비 및 전송"섹션 봐 – 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];   
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.