2011-03-03 2 views
0

버튼 만 누르면 (버튼을 누르고있을 때) 코드의 일부를 활성화하려고합니다. 버튼을 놓으면 내 레이블을 다시 보이지 않게하고 싶습니다. 이 작업을 효과적으로 수행 할 수있는 방법이 있습니까?버튼에 코드 활성화

- (IBAction)toggleIt:(id)sender { 
    if ([myDescription isHidden]) { 
     [myDescription setHidden:NO]; 
    } else { 
     [myDescription setHidden:YES]; 
    } 
} 

어떤 도움이 코드가 동작 설정과 나는 IBAction를 (버튼)와 함께 IBOutlet (A 텍스트 필드)가? (인형 측면에서)

자크

답변

1

나는 그것이 iOS에서 가능한 것으로 Mac에서 IB에서이 일을 방법이 없습니다 두려워 :

UIKit과 AppKit의이 - 많은 관련 유사하지만이 - 두 개의 매우 다른 짐승 . AppKit은 1990 년대 (어쩌면 1980 년대 후반)에 약간의 지점에서 보여지는 유산을 가지고 있습니다. (저는 당신, NSCell을보고 있습니다) UIKit은 약 20 년의 경험을 바탕으로 설계되었습니다. AppKit.

UIControl의 조치가 호출 될 때 쉽게 알 수 있지만 (NSControl) 다른 하나의 조치가 전송되도록 지정할 수 있습니다.

-[NSButtonCell stopTracking:at:inView:mouseIsUp:] 또는 -[NSButton mouseDown:]-[NSButton mouseUp:]을 덮어 쓰지 않으려면 원하는 조치를 취할 수있는 가장 쉬운 방법은 버튼을 계속해서 작동하도록 설정하는 것입니다. 이것은 IB의 뼈일 수 있습니다 ("Control"카테고리의 "Attributes"속성 검사기에서).

- (IBAction)toggleIt:(id)sender { 
    CALayer *descriptionLayer = [myDescription layer]; 
    [descriptionLayer setHidden:NO]; // (ab-)use implicit animation 
    [descriptionlayer performSelector:@selector(setHidden:) withObject:@"" afterDelay:.1]; 
} 

작동 원리 :의 CALayer의

은 "숨겨진"-property을

다음 것은 당신의 설명을 레이어 백업하고 이런 방식으로 액션 메소드를 다시 작성하는 것 애니메이션 가능하고 따라서 변경하면 암시 적 애니메이션이 생깁니다. Objective C가 C이기 때문에 0x0이 아닌 것은 YES으로 해석되며 세 번째 줄이 표시됩니다. 빈 문자열은 분명히 0x0이 아니므로이 작업이 반환 된 직후 숨기기 위해 레이어가 호출됩니다. 그러나 CATransitions은 점진적으로 진행되어 중간 과정에서 업데이트 될 수 있기 때문에 더 이상 동작이 트리거되지 않을 때 (즉, 버튼이 더 이상 눌러지지 않은 경우) 레이어의 가시성에만 영향을 미칩니다.

0

당신은 당신의 레이블을 숨기 다음 UIControlEventTouchUpInside 이벤트를 표시 할 UIControlEventTouchDown를 사용할 수 있습니다.

-(IBAction)buttonHit { 
    [myDescription setHidden:NO]; 
} 

-(IBAction)buttonReleased { 
    [myDescription setHidden:YES]; 
} 
+0

타이머없이 수행 할 수있는 방법이 있습니까? 버튼을 눌렀을 때 텍스트 필드를 숨기면 왜 코드를 지연시키고 싶은지 알 수 없습니다. 놓았을 때 다시 보여주십시오. 타이머가 필요하지 않은 것처럼 보입니다. – Zakman411

+0

@ Zakman411 : 원래 질문을 잘못 읽은 것 같습니다. 나는 내 대답을 업데이트했다. – FreeAsInBeer

+0

나는 인터페이스 빌더에서 buttonHit과 buttonReleased를 어떻게 구현합니까? 나는 각 IBAction으로 끌고가는 것을 보지 못합니까? – Zakman411