프로그래밍 방식으로 UI 버튼에 터치 이벤트를 위장하는 방법은 무엇입니까?
나는 몇 가지 유닛 테스트를 작성하고 있으며, 이 특정 앱의 특성 때문에, 내가 최대한 높은 위치에 있는 것이 중요합니다.UI
가능한 한 쇠사슬로 묶습니다.그래서, 제가 하고 싶은 것은 마치 사용자가 버튼을 누른 것처럼 프로그램적으로 버튼 누르기를 트리거하는 것입니다.GUI
.
(네, 네 -- 저는 그냥 전화할 수 있습니다.IBAction
선택기 하지만, 다시 말하지만, 이 특정 앱의 특성은 내가 실제 버튼 누르기를 가장하는 것을 중요하게 만듭니다.IBAction
버튼 자체에서 호출됩니다.)
이 작업을 수행하는 데 선호되는 방법은 무엇입니까?
알고 보니
[buttonObj sendActionsForControlEvents:UIControlEventTouchUpInside];
이 경우에 필요한 것을 정확히 가져다 주었습니다.
편집: 메인 스레드에서 이 작업을 수행하여 사용자가 누르는 것과 유사한 결과를 얻는 것을 잊지 마십시오.
Swift 3의 경우:
buttonObj.sendActions(for: .touchUpInside)
Swift에 대한 이 답변의 업데이트
buttonObj.sendActionsForControlEvents(.TouchUpInside)
편집: Swift 3용으로 업데이트됨
buttonObj.sendActions(for: .touchUpInside)
스위프트 3:
self.btn.sendActions(for: .touchUpInside)
만약 당신이 이런 종류의 테스트를 하고 싶다면, 당신은 iOS 4의 UI 자동화 지원을 좋아할 것입니다.자바스크립트를 작성하여 버튼 누르기 등을 상당히 쉽게 시뮬레이션할 수 있습니다. 문서(특히 시작 부분)는 약간 희박합니다.
이 경우에는,UIButton
에서 파생됨UIControl
이것은 다음에서 파생된 객체에 대해 작동합니다.UIControl
.
재사용하고 싶었습니다."UIBarButtonItem
특정 사용 사례에 대한 조치.여기서,UIBarButtonItem
방법을 제공하지 않습니다.sendActionsForControlEvents:
하지만 다행히도,UIBarButtonItem
대상 & 작업에 대한 속성이 있습니다.
if(notHappy){
SEL exit = self.navigationItem.rightBarButtonItem.action;
id world = self.navigationItem.rightBarButtonItem.target;
[world performSelector:exit];
}
여기서,rightBarButtonItem
유형의UIBarButtonItem
.
Xamarin iOS용
btnObj.SendActionForControlEvents(UIControlEvent.TouchUpInside);
스위프트 5:
class ViewController: UIViewController {
@IBOutlet weak var theTextfield: UITextField!
@IBOutlet weak var someButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
theTextfield.text = "Pwd"
someButton.sendActions(for: .touchUpInside)
}
@IBAction func someButtonTap(_ sender: UIButton) {
print("button tapped")
}
}
UI 테스트 없이 유닛 테스트를 작성하는 사람들에게 편리합니다 ;-)
신속한 5가지 해결 방법UIBarButtonItem
없는 것은sendAction
UIButton 등과 같은 방법.
extension UIBarButtonItem {
func sendAction() {
guard let myTarget = target else { return }
guard let myAction = action else { return }
let control: UIControl = UIControl()
control.sendAction(myAction, to: myTarget, for: nil)
}
}
이제 간단하게 다음을 수행할 수 있습니다.
let action = UIBarButtonItem(title: "title", style: .done, target: self, action: #selector(doSomething))
action.sendAction()
스위프트 4:
self. your button(셀프)
언급URL : https://stackoverflow.com/questions/4028734/how-to-programmatically-fake-a-touch-event-to-a-uibutton
'programing' 카테고리의 다른 글
프로그래밍 방식으로 Segue를 수행하고 대상 보기에 매개 변수 전달 (0) | 2023.06.10 |
---|---|
Microsoft Excel에서 사용할 수 있도록 숫자를 C# 문자로 변환 (0) | 2023.06.10 |
C 프로그래밍:불완전한 유형 오류에 대한 참조 취소 포인터 (0) | 2023.06.10 |
Typescript/Vue - Prop의 기본 개체를 선언할 때 vuex 저장소에 액세스하려면 어떻게 해야 합니까? (0) | 2023.06.10 |
프로젝트의 루트 디렉터리에서 텍스트 파일을 읽는 방법은 무엇입니까? (0) | 2023.06.10 |