프로그래밍 방식으로 버튼 클릭 이벤트를 발생 시킵니까?


126

프로그래밍 방식으로 버튼 클릭 이벤트를 발생시키는 방법이 있습니까? UIView에 버튼이 있으며 특정 시나리오에서는 사용자가 수동으로하지 않고 코드를 통해 버튼을 클릭하고 싶습니다. iOS 개발이 가능합니까? 당신의 제안을 제공하고 그 방법을 알려주세요.

감사.

답변:


313

Ken의 답변과 비슷하지만 버튼을 변경하거나 둘 이상을 추가하면 버튼의 실제 동작을 추적하므로 더 유연합니다.

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8
button.showsTouchWhenHighlighted = YES실제 터치와 마찬가지로 버튼이 강조 표시됩니까 ?
chown

2
이 대답은 훌륭한 b / c이며 UISwitch (UIControlEventValueChanged)와 같은 다른 컨트롤로 쉽게 변환 할 수 있으며 내 경우에는 대상 / 작업 코드를 직접 호출하는 것보다 훨씬 낫습니다 .b / c 스위치를 전환하고 싶습니다! 고마워.
John Erck

button.showsTouchWhenHighlighted = YES 인 경우 버튼을 강조 표시하지 않습니다. ; (
Richie Hyatt

7
하이라이트가 필요한 경우이 작업을 수행 할 수 있습니다. [button setHighlighted : YES]; [버튼 sendActionsForControlEvents : UIControlEventTouchUpInside]; [버튼 setHighlighted : NO]; 그리고 그것은 잘 작동합니다. -rrh
Richie Hyatt

안녕하세요 @ zaky, 액션 보내기없이 애니메이션 만 원한다면 어떻게 할 수 있습니까?
benhi

13

위와 같은 문제가있었습니다. 의견을 게시했지만 평판이 충분하지 않습니다. 그래서 대신 전체 답변을 게시 할 것입니다.

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

프로그래밍 방식으로 버튼을 누르고 정상적으로 보이는 시간 동안 강조 표시됩니다. 버튼이 눈에 띄지 않는 시간 동안 만 강조 표시 되었기 때문에 Richie의 제안이 작동하지 않았습니다.


강조 표시되지 않았으며 현재 코드 덩어리 실행이 완료된 후에 만 ​​그리기가 발생합니다. 이것은 좋은 수정입니다.
mattsven

6

사용자가 버튼을 누를 때 실행되는 코드를 실행하는 것이 어떻습니까?

-(void)myMethod
{
   // do stuff
}

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

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

아니요, 내 요구 사항은 사용자가 수동으로 클릭 할 때가 아니라 프로그래밍 방식으로 버튼 클릭 이벤트를 발생시키는 방법을 호출하지 않는 것입니다. UIView에서 프로그래밍 방식으로 UIButton을 만들었습니다. 사용자가 아닌 프로그램 자체를 통해 특정 시간 간격 후에 버튼 클릭 이벤트를 자동으로 발생시키고 싶습니다.
Getsy

그러면 터치를 합성하지 않으면 불가능합니다. cocoawithlove.com/2008/10/…을 참조하십시오 . 그러나 개인 API를 사용하므로이 방법을 사용하여 앱을 App Store에 제출할 수 없습니다. 일반적으로 디버깅 목적으로 사용됩니다.
Evan Mulawski

터치를 시뮬레이트해야하는 이유와 메소드를 호출하는 이유를 설명하지는 않지만 가장 쉬운 방법입니다. 타이머 액션은 원하는 메소드를 호출 할 수 있으며 호출하는 메소드는 버튼 상태 (선택, 강조 등)를 변경하여 버튼을 누르는 UI에서 피드백을 제공 할 수 있습니다. 그래도 작동하지 않으면 작동합니다.
XJones

1

UIButton에 대해 이야기하고 있다면 UIButton을 탭했을 때 호출하는 것과 동일한 메소드를 호출 할 수 있습니다. 예를 들면 다음과 같습니다.

[self myButtonsTargetMethod];

아니요, 내 요구 사항은 사용자가 수동으로 클릭 할 때가 아니라 프로그래밍 방식으로 버튼 클릭 이벤트를 발생시키는 방법을 호출하지 않는 것입니다. UIView에서 프로그래밍 방식으로 UIButton을 만들었습니다. 사용자가 아닌 프로그램 자체를 통해 특정 시간 간격 후에 버튼 클릭 이벤트를 자동으로 실행하려고합니다.
Getsy

1

예,

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

그러나 여기서 문제는 너무 빠르기 때문에 해당 이벤트를 볼 수 없다는 것입니다. NSTimer로 위의 코드를 사용해보십시오.

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

MeFirst는 내가 만든 방법입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.