Uibutton 제목/텍스트를 프로그래밍 방식으로 업데이트 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1033763

문제

나는있다 UIButton, 눌렀을 때, 사용자가 일부 설정을 변경할 수있는 새로운보기가 나타납니다. 견해가 기각되면 제목/텍스트를 업데이트하고 싶습니다. UIButton 새로운 상태를 반영합니다. 나는 전화를한다 :

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];

그러나 IB에 지정된 원본 텍스트/제목에서 결코 변하지 않는 것 같습니다.

도움이 되었습니까?

해결책

View Controller 클래스에 iBoutlet으로 지정된 버튼이 있습니까? 인터페이스 빌더의 콘센트로 올바르게 연결되어 있습니까 (새 참조 콘센트에서 파일 소유자로의 CTRL 드래그 및 UIBITTON 개체를 선택하십시오)? 그것은 보통 이러한 증상을 볼 때 내가 가진 문제입니다.


편집 : 여기에는 그렇지 않지만 이와 같은 것은 제목에 기인합니다 버튼으로, 당신은 제목을 변경하려고 시도하지 않고 제목을 변경하려고합니다.

다른 팁

uicontrolstatenormal의 제목 매개 변수를 설정하는 문제를 해결했으며 다른 상태에서 자동으로 작동합니다. 문제는 다른 uicontrolstate를 설정할 때인 것 같습니다.

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

나는 또 다른 문제를 발견했다. iOS 5에 도입 된 버그 일지 모르지만, 다른 사람에게는 그것을 지적 할 것이라고 생각했습니다.

XIB의 버튼에 대한 기본 텍스트를 설정하지 않으면 프로그래밍 방식으로 설정하면 텍스트가 나타나지 않습니다. XIB에서 텍스트를 설정하면 프로그래밍 방식으로 버튼에 할당하는 텍스트는 기본 텍스트의 크기로 잘립니다.

마지막으로 버튼으로보기를 표시 한 다음 다른보기 (액션 시트와 같은)를 호출 한 다음 해산하면 프로그래밍 방식으로 버튼에 할당 한 텍스트가 지워지고 버튼 캡션이 설정 한 내용으로 돌아갑니다. xib에서.

카페인 코마의 문제가 해결되었지만 제목이 Uibutton에 표시되지 않는 또 다른 잠재적 원인을 제공하고 싶습니다.

Uibutton을 사용하여 이미지를 설정 한 경우

- (void)setImage:(UIImage *)image forState:(UIControlState)state

제목을 다룰 수 있습니다. 나는 이것을 어려운 방법으로 발견하고 같은 이유로이 페이지를 읽게된다고 상상해보십시오.

대신이 방법을 사용하십시오

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state

버튼 이미지의 경우 제목이 영향을받지 않습니다.

.xib에서 생성 된 프로그래밍 방식으로 만든 버튼과 버튼으로 이것을 테스트했습니다.

Swift 4에서 :

    button.setTitle("Click", for: .normal)

Swift :

button.setTitle("Swift", forState: UIControlState.Normal)                   

문서가 당신에게 답을 말하는 것으로 밝혀졌습니다! Uibutton은 이미 사용할 문자열이있는 경우 제목 변경을 무시합니다 (Xcode Interface Builder를 사용할 때 얻을 수있는 기본값 인 것 같습니다).

다음을 사용했습니다.

[self.loginButton 
     setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Error !!!" attributes:nil] 
     forState:UIControlStateDisabled];
[self.loginButton setEnabled:NO];

가능한 한 가지 원인은 다음과 같습니다.

버튼의 제목을 (id)initWithNibName: ... 방법, 당신은 버튼 속성이 여전히 nil입니다. 아직 Uibutton에 할당되지 않았습니다.

당신은 당신이 당신의 버튼을 다음과 같은 방법으로 설정했는지 확인해야합니다. (void)viewWillLoad 또는 (void)viewWillAppear,하지만 당신은 아마도 그들을 늦게 설정하고 싶지 않을 것입니다. (void)viewDidAppear.

때로는 정말 복잡해질 수 있습니다. 쉬운 방법은 "새로 고치다"버튼보기!

//Do stuff to your button here.  For example:

[mybutton setEnabled:YES];

//Refresh it to new state.

[mybutton setNeedsDisplay];

나는 이것에 계속 문제가 있었지만, 유일한 해결책은 Uibutton에 서브 뷰로 이미지와 레이블을 추가하는 것이 었습니다. 그런 다음 주요 문제는 제목과 함께 Uibutton을 사용하고 있다는 것입니다. 내가 그것을 평원으로 변경했을 때, titlelabel.text를 설정하는 것만으로도 트릭을 수행했습니다!

@funroll은 절대적으로 옳습니다. 여기에서 필요한 것을 볼 수 있습니다 메인 스레드에서만 함수가 실행되는지 확인하십시오. 스레드를 처리하고 싶지 않은 경우 다음과 같은 것과 같은 작업을 수행 할 수 있습니다. NSUSERDEFAULTS를 작성하고 ViewDidload 체킹 조건에서 다른보기에서 버튼을 누르지 않았습니다 (NSUSERDEFAULTS가 필요한 정보에서 설정 한 다른보기). 당신의 uibutton, so [yourbutton settitle : @"title"forstate : uicontrolstatenormal];

메인 스레드에 있는지 확인하십시오.

그렇지 않다면 여전히 버튼 텍스트를 저장합니다. 디버거의 물체를 검사 할 때 거기에있을 것입니다. 그러나 실제로보기는 업데이트되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top