2011-01-26 6 views
4

UISwitch에서 텍스트를 변경하려고합니다. 웹 사이트의 샘플 (Changing the text on a UISwitch)은 정상적으로 작동하지만 xcode를 3.2.5 및 iOS 4.2로 업그레이드하면 텍스트를 변경하기 위해 함수를 호출 할 때 응용 프로그램이 중단됩니다. 웹 사이트에서 다음 예제를 사용하고 있습니다.iOS 4.2에서 UISwitch 텍스트 변경

예 :

((UILabel *)[[[[[[_agreeAgb subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Foo"; 
((UILabel *)[[[[[[_agreeAgb subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"Bar"; 

null 개체가 발생하기 때문에 예외가 발생합니다.

감사합니다.

+0

나는 똑같은 문제에 직면하고있다. 어떻게 해결 했는가? – Pooja

답변

14

하지 마십시오. 프레임 워크 컨트롤의 개인보기 계층을 조작하는 것은 절대적으로 지원되지 않으며 OS 업데이트와 호환되지 않을 수 있습니다. 특히 코드가 계층 구조를 전혀 확인하지 않으므로 하위 뷰의 수나 유형이 예상 한 것과 일치하지 않으면 매우 쉽게 충돌 할 수 있습니다.

+2

그것은 좋은 대답이 아니다. 그러면 그 해결책은 무엇입니까? –

+6

@Hisoka : 내 대답의 요점을 놓쳤다 고 생각합니다. 좋은 솔루션이 없다는 것입니다. –

7

4.2에서 성공한 결과는 this code from here입니다. UISlitch (UISwitch가 아님)를 하위 클래스로 분류하여 사용자 정의 된 UISwitch와 동일한 효과를 나타냅니다.

+0

+1 그리고 위의 대답에 -1. 당신이 그랬던 것처럼 그렇게 할 수 없다는 것은 사실이지만, 당신의 질문에 대한 진정한 대답은 다른 레이블을 가진 UISwitch 동등 물을 얻는 방법입니다. 다른 옵션은 다음과 같습니다. http://osiris.laya.com/projects/rcswitch/ – Rhubarb

+0

이 솔루션을 사용하는 사람들에게만 알려주십시오. 사용자가 직접 스위치 이미지를 제공해야합니다. iOS가 새로운 스타일 스위치 (iOS 5?)로 전환하면이 기능을 사용하는 모든 앱에는 이전 버전과 유사한 스위치가 표시됩니다. 따라서 새로운 iOS 버전이 나타나면이 솔루션의 일관성을 시각적으로 확인해야합니다. – Nate

0

시도 아이폰 OS 6에 소개 된 onImageoffImage 속성을 설정하여 표시되는 내용을 변경할 수 있습니다 사용자 지정 가능한 오픈 소스 UISwitch 대체품을 사용합니다.

DCRoundSwitch on GitHub 꽤 괜찮은 것 같습니다. 그러나 GitHub가 작동하지 않는다면 더 많은 것들이 있습니다.

이러한 접근 방식은 스위치의 기능을 구현하고 자체적으로 그리기 때문에 핵심 기능인 UIControl 기본 클래스에만 의존하므로 동일한 비 호환성 문제가 발생하지 않습니다. 수시로 업데이트해야하는 유일한 라이브러리는 사용중인 라이브러리 (DCRoundSwitch)이지만 UIControl 및 Quartz 드로잉과 같은 기본 기능은 매우 확고하며 드물게 변경되므로 드물고 최소한의 위험 요소로 간주 될 수 있습니다 .