2012-11-26 5 views
0

IB에서 만든 UISegmentedControl의 텍스트를 변경하려고합니다. 이것은 코드입니다UISegmentedControl 텍스트 변경

[changeButton removeAllSegments]; 
[changeButton insertSegmentWithTitle:NSLocalizedString(@"Traffic",@"traffic string") atIndex:0 animated:YES]; 
[changeButton insertSegmentWithTitle:NSLocalizedString(@"Satellite",@"satellite string") atIndex:1 animated:YES]; 

하지만 아무 일도 일어나지 않습니다 : 나는 항상 기본 레이블 인 나를 위해 두는 IB ("First"와 "Second")를 봅니다. 확인을 위해 , 내 .H에 함께 IBOutlet을 넣어 :

__weak IBOutlet UISegmentedControl *changeButton; 

나는 무엇을 놓치고? 일반적으로 IB에서 컨트롤을 만들 때 프로그래밍 방식으로 액세스하려면 IBOutlet을 .h에 넣는 것이 올바른 방법입니까?

+0

속성과 ivars가 혼합되어 있습니다. changeButton이 속성입니까? – Fogmeister

+0

@ Fogmeister OP가 가지고있는 것이 속성 선언이라고 생각하지 않습니다. 약한 속성인지 약한 변수인지는 중요하지 않습니다. –

+0

그가 changeButton 속성을 연결하고 ivar changeButton에 액세스하려고해도 문제가되지 않습니다. 그것들은 같은 것이 아닙니다. 그는 ivar _changeButton (또는 self.changeButton)에 액세스해야합니다. – Fogmeister

답변

0

것은 해결했다. 문제는 내가 init 메소드에서 위의 명령어를 썼다는 것입니다. 대신 viewDidLoad 메서드 안에 들어가야합니다!

1
__weak 

아이 약한 경우, 그것은 해제이고 (그것을 생성하는 방법을 반환 할 때) 범위의 끝 부분으로 널 ... 기다립니다. 그걸 __weak으로 생략하면 괜찮을 것입니다.

+0

작동하지 않습니다. 내가 __weak ... 삭제하고 결과는 동일합니다. – giuseppe

+0

@giuseppe 나는이 실수를 실제로 저지른 참고자로서이 대답을 유지할 것이다. 내가 권고 한 것을하는 것도 필요하다. (코드를'init'에서'viewDidLoad'로 옮기는 것 말고). 덧붙여서, IB를 사용하는 것과는 대조적으로 코드를 사용하여 UI 요소를 만든다면'init'에서 그 속성을 안전하게 변경할 수 있습니다. –

0

이것은 changeButton이라는 속성과 ivar를 둘 다 설정하는 경우에만 관련이 있습니다. 그것은 OP에서 명확하지 않기 때문에 여기에 넣어.

속성 및 ivars를 혼합하는 것처럼 보입니다.

changeButton ivar는 changeButton 속성과 다릅니다.

라인을 삭제

... .H

과 코드를 변경에서

__weak IBOutlet UISegmentedControl *changeButton; 

...

[_changeButton removeAllSegments]; 
[_changeButton insertSegmentWithTitle:NSLocalizedString(@"Traffic",@"traffic string") atIndex:0 animated:YES]; 
[_changeButton insertSegmentWithTitle:NSLocalizedString(@"Satellite",@"satellite string") atIndex:1 animated:YES]; 
+0

이해가 안됩니다. if (changeButton.selectedSegmentIndex == 0)를 넣으면 changeButton에 액세스 할 수 있습니다. _changeButton을 사용해야하는 이유는 무엇입니까? – giuseppe

+0

내가 말했듯이 이것은 changeButton에 대한 속성과 ivar를 모두 설정 한 경우에만 관련이 있습니다. changeButton처럼 메시지를 보낼 수 있습니다.selectSegmentIndex는 changeButton이 nil 인 경우에도 작동합니다. changeButton이 nil인지 확인하기 위해 중단 점 (또는 NSLog)을 설정합니다. – Fogmeister

+0

예, 사용하지 않습니다. 왜? 내 .h에는 "IBOutlet UISegmentedControl * changeButton;"만 있습니다. 다른 정의는 없습니다. 어쨌든, __weak 행을 지우면 빌드가 실패하고 _changeButton에 대한 참조가 없습니다. – giuseppe