programing

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

padding 2023. 8. 21. 20:57
반응형

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

나는 있습니다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에 명시된 원본 텍스트/제목에서 절대 변경되지 않는 것 같습니다.

UIControlStateNormal에 title 파라미터를 설정하는 것만으로 문제를 해결했고, 다른 상태에서도 자동으로 작동합니다.문제는 다른 UIControl State를 설정하는 경우인 것 같습니다.

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

뷰 컨트롤러 클래스에 IBOutlet으로 지정된 버튼이 있으며, Interface Builder(인터페이스 빌더)에서 콘센트로 올바르게 연결되어 있습니까(ctrl을 새 참조 콘센트에서 파일 소유자로 드래그한 후 UIButton 개체 선택)?제가 이런 증상들을 볼 때 주로 겪는 문제입니다.


편집: 여기서는 그렇지 않지만 버튼에 속성 제목을 설정한 경우에도 이와 같은 현상이 발생할 수 있습니다. 그러면 속성 제목이 아닌 제목을 변경하려고 합니다.

스위프트 4 기준:

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

저는 또 다른 문제를 발견했습니다.iOS 5에서 소개된 버그일 수도 있지만, 저는 그것을 접하는 다른 사람들을 위해 그것을 지적할 것이라고 생각했습니다.

XIB에서 단추의 기본 텍스트를 설정하지 않은 경우 프로그래밍 방식으로 설정해도 텍스트가 나타나지 않습니다.또한 XIB에서 텍스트를 설정하면 나중에 버튼에 프로그래밍 방식으로 할당한 텍스트가 기본 텍스트 크기로 잘립니다.

마지막으로 단추로 보기를 표시한 다음 다른 보기를 호출하는 경우(예: 작업)Sheet)를 선택한 다음 해제하면 버튼에 프로그래밍 방식으로 할당한 텍스트가 지워지고 버튼 캡션이 XIB에서 설정한 내용으로 돌아갑니다.

카페인 코마의 문제가 해결되었지만, 저는 제목이 UI 버튼에 나타나지 않는 또 다른 잠재적인 원인을 제공하고 싶습니다.

다음을 사용하여 UIButton에 대한 이미지를 설정하는 경우

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

제목을 가릴 수 있습니다.저는 이것을 어려운 방법으로 발견했고 여러분 중 몇몇이 같은 이유로 이 페이지를 읽는다고 상상해 보세요.

대신 이 방법 사용

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

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

프로그래밍 방식으로 생성된 버튼과 .xib로 생성된 버튼으로 테스트했습니다.

신속하게:

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

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

에서 단추의 제목을 설정하려는 경우(id)initWithNibName: ...방법, 그러면 당신의 버튼 속성은 여전히 0이 될 것입니다.아직 UI 버튼에 할당되지 않았습니다.

다음과 같은 방법으로 단추를 설정해야 합니다.(void)viewWillLoad또는(void)viewWillAppear하지만 당신은 아마도 그들을 가능한 한 늦게 설정하고 싶지 않을 것입니다.(void)viewDidAppear.

알고보니 의사들이 답을 알려주는군요!UIButton에 이미 사용할 Attributed String이 있는 경우(Xcode 인터페이스 빌더를 사용할 때 기본값으로 표시됨) 제목 변경이 무시됩니다.

다음을 사용했습니다.

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

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

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

[mybutton setEnabled:YES];

//Refresh it to new state.

[mybutton setNeedsDisplay];

저는 이것에 대해 계속해서 문제를 일으켰고, 유일한 해결책은 이미지와 라벨을 하위 뷰로 Uibutton에 추가하는 것이었습니다.그리고 나서 저는 제가 제목이 있는 UI 버튼을 사용하는 것이 주요 문제라는 것을 알게 되었습니다.귀속됨.Plain으로 변경했을 때 Label.text라는 제목을 설정하는 것만으로도 효과가 있었습니다.

@funroll은 전적으로 옳습니다.여기서 필요한 기능을 확인할 수 있습니다. 기능이 메인 스레드에서만 실행되는지 확인합니다.예를 들어 스레드를 처리하지 않으려면 다음과 같이 할 수 있습니다. NSUserDefaults를 생성하고 ViewDidLoad 확인 조건에서 다른 보기에서 버튼을 눌렀습니다(NSUserDefaults에 설정된 다른 보기에서 필요한 정보). UIButton에 필요한 제목을 설정한 조건에 따라그래서 [버튼 세트 제목: 상태: UIControlStateNormal의 "제목"];

메인 스레드에 있는지 확인합니다.

그렇지 않으면 단추 텍스트가 계속 저장됩니다.디버거에서 개체를 검사할 때 표시됩니다.그러나 실제로 보기를 업데이트하지는 않습니다.

언급URL : https://stackoverflow.com/questions/1033763/is-it-possible-to-update-uibutton-title-text-programmatically

반응형