programing

프로그래밍 방식으로 UI 버튼에 터치 이벤트를 위장하는 방법은 무엇입니까?

batch 2023. 6. 10. 08:34
반응형

프로그래밍 방식으로 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없는 것은sendActionUIButton 등과 같은 방법.

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

반응형