2017-02-15 10 views
0

viewController의 subView로 뷰를 추가했습니다. 이 하위 뷰와의 ViewController 모두 모두 내가 하위 뷰를 탭, 두 때이 메서드가 호출됩니다 발견이 방법touchesEnded를 중지하는 방법 : withEvent : subView에서 ViewController로 propogate 하시겠습니까?

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 

를 구현합니다. 하위 뷰의 touchesEnded 만 호출하려고합니다. 어떻게하면 좋을까요?

touchesEnded에서 apple doc은 다음과 같이 말합니다. "super (공통 사용 패턴)를 호출하지 않고이 메서드를 재정의하는 경우 터치 이벤트를 처리하는 다른 메서드도 재정의해야합니다. if 스텁 (비어있는) 구현으로 만 제공됩니다. "

다른 방법은 무엇입니까? 대신 구현

답변

1

답을 줄 수 있도록 우리는 당신이 시도하고있는 무슨 알려하려는 경우 서브 뷰의 코드!

터치 이벤트를 수퍼 뷰로 전달하지 않으려면 터치 이벤트의 모든 메서드를 재정의해야합니다. 모든 터치 이벤트 메소드를 하위 뷰에 추가하면 OK입니다.

+0

nice, man, it works !! 그리고 나는 touchesBegan 만 구현해야한다는 것을 알았습니다. 잘 작동합니다. 감사합니다! – ximmyxiao

0

하위 뷰의 touchesDidEnd 이유

if([touch anyObject].view == subview){ 
    return; 
} 

처럼 터치가 서브 뷰 또는 수퍼에서 원래 여부를 알 수있을 것입니다이 방법을 수퍼의 touchesDidEnd 뭔가 모든 일을 할 수 없습니다.

대체 : 당신은 구현할 수 모두 슈퍼 뷰와 서브 뷰의 방법이 있지만, 위의 코드와 같은 당신은 상호 작용 뷰는 서브 뷰의 경우, 수퍼에 전화를 반환하고, 터치에서 작업을 계속할 수 있습니다

경우에 다른 의견 PLZ 우리가 당신은 가까운 따라

+0

실제로 컨트롤러의 코드에서 서브 뷰 코드를 분리하고 싶습니다. 따라서 서브 뷰에서 슈퍼 뷰로 전달을 중단 할 방법이 없습니까? – ximmyxiao

+0

터치 코드의 경우에는 서브 뷰에 대한 감동으로 슈퍼 뷰의 코드가 실행되기 때문에 가능하지 않다고 생각합니다. 당신이 할 수있는 일은 내가 말했듯이 superview의 코드에서의 접촉을 무시하는 것이다.하지만 감추어 진 데이터를 계속 처리한다. subview – souvickcse

+0

덕분에, @ sovickcse 덕분에 – ximmyxiao