2012-05-24 2 views
2

저는 아이폰 앱을 디버깅 중이며 완전히 이해하지 못하는 것을보고 있습니다.view.hidden = x와 [view setHidden : x]의 차이점

사용자의 선택에 따라 UIView가 표시되거나 숨겨집니다. 현재 코드는 [view setHidden:NO][view setHidden:YES]으로보기를 표시하거나 숨 깁니다. 이것은 작동하지 않습니다. 시각적으로 말하면 이러한 진술은 무시됩니다. 그러나 각각을 view.hidden = NOview.hidden = YES으로 변경하면 모든 것이 예상대로 작동합니다.

저는 두 구문이 동등하지만 분명히 생각하지 않았습니다. 다른 모든 속성 (text, font 등)의 경우 모두 동일하게 작동하므로 hidden의 특수 효과는 무엇입니까?

편집 : 다음은 내 코드의 복사/붙여 넣기입니다. 나는 XCode 4.3에서 iPhone 시뮬레이터 5.0을 가지고 일하고있다.

내 프로젝트의 한 가지 예가있다.

IBOutlet UIView *panel; //Connected in interface builder 

=========== 

- (void)makePanelVisible:(BOOL)visible 
{ 
    [panel setHidden:!visible]; //this does not work 
    panel.hidden = !visible;  //this does work correctly. 
} 
+0

setHidden은 단순히 숨겨진 속성에 대해 생성 된 setter이므로 차이가 없어야합니다. 사실, view.hidden = YES를 사용하여 속성을 할당하면 내부적으로 setHidden을 호출해야합니다. 일부 코드를 붙여 넣을 수 있습니까? 문제는 다른 곳에있을 수 있습니다. 보기 유형은 무엇입니까? –

+0

붙여 넣을 코드가 많지 않습니다. 뷰는 문자 그대로 'UIView'입니다. 문제의 두 줄을 1 분 안에 붙여 넣을 것입니다. –

답변

1

이 문제에 대해 다시 생각해 보면, 거의 3 년 전, iPhone 3 (3G조차도 아님)이 분노했던 때와 같은 문제에 부딪쳤다는 것을 기억합니다. 왜 이런 일이 일어나는 지 모르겠습니다 만, 그렇습니다. 그래서 저는 "점"표기법을 사용하여 속성을 설정함으로써이 문제를 해결합니다. 나는 이것이 "깨지지 않으면 고치지 마라"는 것 중 하나라고 생각합니다. (괜찮습니다. 깨지기 쉽지만 주변에는 쉬운 방법이 있으므로 사용하고 있습니다).

-1

hidden은 UIView의 속성입니다. [panel setHidden : YES]를 쓸 때 속성을 숨김으로 설정해야하는 setHidden 메서드를 호출하려고합니다. 메서드가 UIView에 없기 때문에 작동하지 않습니다. https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816

필자는 항상 "view.hidden = x"을 작성하여 속성을 설정합니다.

도움이되기를 바랍니다.

+0

이것은 분명히 잘못되었습니다. 'hidden '은'@property (nonatomic, getter = isHidden) BOOL hidden'으로 선언되는 속성입니다. 이것은 소유자 클래스가'setHidden : (BOOL)'과'isHidden' 메소드를 가지고 있음을 의미합니다. 메서드가 존재하지 않으면 오류가 발생하거나 적어도 XCode에 경고가 표시됩니다. 대신 호출은 단순히 무시 된 것처럼 보입니다. –

0

보기가 숨겨 지도록 설정합니다.

- (void)setHidden:(BOOL)flag 

수신자가 숨김으로 표시되는지 여부를 반환합니다.

- (BOOL)isHidden 

hidden = YES; setHidden : YES와 동일합니다. 차이점은 숨겨진 상태로 YES로 바뀌는 것입니다. sethidden보기가 창에서 사라지고 숨겨진 것으로 설정되어 있으므로 입력 이벤트를 수신하지 않는 반면입니다. 그러나 superview의 하위 뷰 목록에 그대로 있으며 평상시처럼 자동 크기 조정에 참여합니다.

+0

그리고 어떻게 문제를 설명 할 수 있습니까? 나는 이미 이것을 알고있다. –

+0

내 대답을 편집했습니다. 그것을 확인하십시오 – user1120133

+1

문제는'setHidden : NO' 메소드 호출은 **보기를 숨기지 않습니다 ** - 뷰는 호출 후에도 계속 표시됩니다. 아직 모든 문서에서, 그것은해야합니다. –

관련 문제