2009-03-11 3 views
4

iPhone의 UISegmentedControl 클래스에 대한 간단한 질문입니다.UISegmentedControl 동작

2 개의 세그먼트가있는 기본 상태에서 사용자가 현재 선택된 세그먼트를 탭한 경우에도 세그먼트 된 컨트롤이 계속 토글되는 방식을 알 수 있습니다.

나는 그 행동을 무효화하고 사용자가 선택한 세그먼트를 누를 때 토글하지 않는 앱에서 UISegmentedControls를 보았습니다. 즉, 애플의 iTune Store 앱.

간과되고있는이 동작을 방지하는 간단한 방법이 있습니까? 아니면 valueChanged에 일부 논리를 써야합니까?

나는 현재 선택된 세그먼트를 비활성화하고 선택되지 않은 세그먼트를 활성화하려고 시도했으나, 원하지 않을 때 컨트롤의 모양이 변경되는 것 같습니다.

아이디어가 있으십니까?

답변

8

UISegmentedControl.h 헤더 파일을보십시오 (쉬운 방법은 XCode에서 Command를 누른 상태에서 "UISegmentedControl"을 두 번 클릭하는 것입니다).

여기에 _segmentedControlFlags 구조체에 여러 항목이 표시됩니다. UISegmentedControl에서 카테고리를 만들면 dontAlwaysToggleForTwoSegments 등의 요소를 조작 할 수 있습니다. 이름으로 추측 할 수있는 것은 사용자가 찾고있는 것입니다.

API 헤더에 문서화되었으므로 (실제 문서에는 없지만) 사용하는 것이 안전해야합니다.

+0

고마워! 그게 바로 제가 찾던 것입니다. Apple이 문서화 된 부동산으로 만들지 않은 이유에 대해 알고 있습니까? – Jasarien

+0

정확히는 모르겠지만, 애플이 다른 클래스의 헤더에서 다른 것들을 사용하지 않기를 바란다면 헤더가 아니라 문서에있는 것이 흥미 롭습니다. –

+3

이것은 API가 문서화되어 있지 않습니다. 은밀한. 헤더에 노출 된 이유는 시뮬레이터가 레거시 런타임을 사용하고 ivar 레이아웃이 일관성이 있어야하기 때문입니다. 이것이 시뮬레이터의 한 빌드에 대해 컴파일 된 애플 리케이션이 다른 시뮬레이터 빌드에 대해 항상 올바르게 작동하는 것은 아닙니다. 이렇게하면 Apple이 향후 OS 릴리스에서 클래스의 레이아웃을 변경하면 갑자기 중단 될 수 있습니다. –

4

이 기본 동작은 3.0 API에서 변경되었습니다.

3.0
4

"_segmentedControlFlags"는 여전히 UISegmentedControl.h 헤더 파일에서 발견 될 수있는 "순간"속성으로 변경되었다.

1

Category를 통해 _segmentedControlFlags에 액세스하는 것은 개인 API의 사용으로 간주되어 Apple에서 라이센스 계약을 위반 한 것으로 간주되어 오늘 배워야했습니다. 지금까지는 카테고리가 끔찍한 클래스 디자인을 고치기위한 언어 기능이라고 생각했습니다 ...

+0

헤더에 노출 된 경우 비공개가 아닙니다. 비공개 API의 사용에는 사설 프레임 워크에 대한 링크와 해당 프레임 워크에 대한 고유 한 헤더를 만들기위한 심볼 정보 덤핑이 포함됩니다. – Jasarien

+1

어제 애플로부터 메일을 받았는데, _segmentedControlFlags에 대한 불평과 생략을 요구했다. – aldi

관련 문제