2017-09-10 3 views
0

세 개의 하위 뷰가있는 사용자 지정 UIControl이 있습니다. 그것은 어떤 전환을 (그것은 세그먼트 컨트롤을 모방) 할 몇 가지 특별한 애니메이션을 수행, 그 함수 buttonTapped맞춤 uicontrol 및 컨트롤러에 터치 이벤트를 추가하는 방법은 무엇입니까?

button.addTarget(self, action: #selector(buttonTapped(clickedBtn:)), for: .touchUpInside) 

: 그 파단 각, 나는 대상을 추가 할 수 있습니다.

이제이 사용자 정의 UIControl이있는 ViewController 내에서 터치 할 때 알아야합니다. 커스텀 UIControl의 터치 이벤트와 상호 작용하는 @IBAction 함수를 만들었습니다.

문제는 (내가 아는 한) 불가능하다는 것입니다. 하위보기에 대상 터치 이벤트를 추가하면 상위 터치 이벤트가 호출되지 않습니다. 부모보기를 @IBAction 함수라고 부르려면 모든 하위보기의 setUserInteractiveEnabled to을 true로 설정해야합니다. 그렇게하면 하위보기의 터치 이벤트 함수가 호출되지 않습니다.

터치 이벤트 기능을 모두 호출해야합니다. 어떻게해야합니까? 또는이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

당신이 * 전체 * 사용자 정의 컨트롤이 (가)'IBAction'가, 다음은'.touchUpInside' 도청 된 * 하위 뷰 * 결정에있을 수 있을까요? – dfd

답변

2

대표자를 사용하여 프로토콜을 UIControl에 추가하여 ViewController에 구현해야합니다.

이 방법을 사용하면 UIControl에서 버튼을 클릭하여 VC에서 특정 기능을 호출 할 수 있습니다. 예를 들어

:

//YourUIControl.Swift 
protocol YourUIControlDelegate { 
    func didTapFirstButton() 
} 

class YourUiControl : UIView { //I'm assuming you create your UIControl from UIView 

    var delegate : YourUIControlDelegate? 
    //other codes here 
    . 
    . 
    . 
    @IBAction func tapFirstButton(_ sender: AnyObject) { 
    if let d = self.delegate { 
     d.didTapFirstButton() 
    } 
    } 
} 

//YourViewController.Swift 
extension YourViewController : UIControlDelegate { 
    func didTapFirstButton() { 
    //handle first button tap here 
    } 
} 
+0

그게 효과가! 내가 추가해야하는 유일한 것은'YourViewController'에있는'viewDidLoad'에서'YourUIControl' 델리게이트를 self로 설정할 필요가 있습니다. –

+0

예! 그것은 트릭을 할 것입니다. :) 잘 했어 –

관련 문제