2013-08-20 3 views
0

UIApplication :: sendEvent 오버라이드에 있습니다. 궁극적으로 나에게 UITouch 객체를주는 UIEvent를 얻는다. UITouch가 위상 == 3 일 때 (터치 위상이 끝났거나 터치 업), UITouch의 뷰 객체가 UISegmentedControl인지 아닌지 식별하려고합니다. 그렇다면 selectedSegmentIndex를 얻으려고합니다. 이 시점에서 나는 항상 잘못된 값 (또는 selectedSegmentIndex의 이전 값)을 얻습니다.UISegmentedControl - 터치 업시 selectedSegment가 변경되지 않습니까?

이 값은 조치 메소드가 실행 된 후에 만 ​​변경됩니까? 또는 selectedSegmentIndex의 최신 값을 가져 오려면 무엇을해야합니까?

도움을 주시면 감사하겠습니다.

- (void)sendEvent:(UIEvent *)event 
{ 
[super sendEvent:event]; 

NSSet *touches = [event allTouches]; 

NSEnumerator *enumerator = [touches objectEnumerator]; 
id value; 
while ((value = [enumerator nextObject])) { 
    UITouch *touch = value; 

    if (touch.phase==3) { 
     if([touch.view isKindOfClass:[UISegmentedControl class]]) 
     { 
      UISegmentedControl *sc = (UISegmentedControl*)touch.view; 

      NSLog(@"%d",[sc selectedSegmentIndex]); 

     } 

    } 
} 
} 
+3

설명하는 대신 코드 표시 –

+0

@Andrey - 코드를 추가했습니다. 희망이 도움이됩니다. – Jailbroken

답변

0

마지막으로 업데이트 된 값을 얻는 방법을 알았습니다.

sendEvent 대신 sendAction을 재정의하십시오. 여기서 selectedSegmentIndex에 대한 업데이트 된 값은 물론 이벤트 유형을 가져올 수 있습니다.

-(BOOL)sendAction:(SEL)action to:(id)target from:(id)sender forEvent:(UIEvent *)event 
{ 
NSLog(@"%u",[((UIControl*)sender) allControlEvents]); 

}