[ios] UIButton 제목 텍스트는 주 스레드에서 업데이트하더라도 업데이트되지 않습니다.



Answers

나는 똑같은 문제를 겪고 있었고, 그 밖의 곳에서는 내가 attributedTitle을 설정하고 있다는 것을 알았다. 따라서 제목에 대한 업데이트가 기여한 제목에 영향을 미치지 않았습니다.

내 솔루션 :

[button setAttributedTitle:@"" forState:UIControlStateNormal];

대신에

[button setTitle:@"" forState:UIControlStateNormal];
Question

내가 프로그래밍 방식으로 만든 UIButton 의 제목을 사용자가 클릭 할 때 변경하려고합니다. 그래서, 이것은 UIButton 을 생성하는 코드입니다.

myButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height)];
[myButton setBackgroundColor:[UIColor blackColor]];
[myButton setAlpha:0.7];
[myButton setTitle:@"Hello" forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(userClicked:) forControlEvents:UIControlEventTouchUpInside];

[parentView addSubview:myButton];

그리고, 내 userClicked: 메서드에서, 내가 할 :

-(void) userClicked:(UIButton*)button
{
    NSLog(@"USER CLICKED!!!");
    if ([NSThread isMainThread])
    {
        NSLog(@"is main thread");
    }

    [button setTitle:@"Bye" forState:UIControlStateHighlighted];
    [button setTitle:@"Bye" forState:UIControlStateNormal];
    [button setTitle:@"Bye" forState:UIControlStateSelected];

    [self someLengthyComputation];
}

이상한 것은 인쇄 된 로그 메시지를 볼 수 있다는 것입니다.

USER CLICKED!!! 
isMainThread

그러나 버튼의 제목은 바뀌지 않습니다! 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 : 여러 상태에 대한 제목 설정 중 하나를 작동하지 않습니다.

EDIT2 : Xcode의 디버거 창에 버튼 설명을 인쇄하면 올바른 제목이 표시됩니다!

Printing description of button->_titleView:
<UIButtonLabel: 0xa4c9310; frame = (95 216; 130 22); text = 'Bye'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xa44f080>>



Apple 개발자 가이드에 따라 버튼 제목 레이블 텍스트 나 색상을 속성으로 직접 설정하면 안됩니다 (예 : myButton.titleLabel.text = @ "SomeText"또는 myButton.titleLabel.textColor = [UIColor blackColor ]).

오히려 UIButton setter 기능을 사용하여 다음과 같이 설정합니다.

    [myButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

... 또는 이와 같이 :

    [myButton setTitle:@"SomeText" forState:UIControlStateNormal];.

Apple 가이드를 참조하십시오.




이것은 좀 늦었고 Walter Schurter의 답변과 다소 관련이 있습니다.

7.1로 업데이트 할 때까지 버튼 텍스트를 올바르게 설정 한 것과 비슷한 문제가있었습니다. 그런 다음 버튼이 비활성화 되었기 때문에 텍스트가 표시되도록 비활성화 상태의 제목 색상과 제목 텍스트를 설정해야한다는 것을 알게되었습니다. 모든 것이 매력처럼 작동했습니다!




코드에는 몇 가지 문제가 있습니다.

단추에 콜백을 지정하는 중입니다.

@selector(userClicked:)

그러나 당신의 코드는 또 다른 방법이다.

-(void)userTapOnTapToRefreshView:(UIButton*)button

이 문제를 해결하려면 다음과 같이 구현해야합니다.

-(void)userClicked:(id)sender
{
    [(UIButton*)sender setTitle:@"Bye" forState:UIControlStateNormal];
}

또한이 코드 부분은 나를 이해할 수 없습니다.

[parentView myButton];

다음과 같이 변경하십시오.

[parentView addSubview:myButton];

희망이 도움이 될 것입니다 :)




버튼 레이아웃 새로 고침 문제 일 수 있습니다. 사용 해보십시오 ...

[button setNeedsLayout];
[button layoutIfNeeded];

버튼이 레이아웃을 업데이트하도록합니다.




버튼 유형을 '시스템'대신 '사용자 정의'로 변경하면 예상대로 작동합니다.




나는 '버튼'매개 변수로 전달 된 myButton.Anyway, myButton 멤버 var 경우 의심 할 여지 만 [myButton setTitle : @ "안녕"forState : UIControlStateNormal];




위의 어느 것도 (UIPopoverController로 제시된 뷰의 맨 위에 버튼이있다) 해결할 수 없었고, setTitle, removeSubview 전에 removeFromSuperview를 써야했다. 비슷한 문제가있는 누군가를 도울 수 있기를 바란다.




이 시도:

[button setTitle:@"Bye" forState:UIControlStateHighlighted];

또는:

[button setTitle:@"Bye" forState:UIControlStateSelected];

void 함수를 수정할 수도 있습니다.

-(void) userClicked
{
    NSLog(@"USER CLICKED!!!");
    if ([NSThread isMainThread])
    {
        NSLog(@"is main thread");
    }

    [myButton setTitle:@"Bye" forState:UIControlStateNormal];
}



스토리 보드를 사용하여 비슷한 문제가 발생했습니다. 위의 답변을 사용하면

[mybutton setTitle:@"SomeText" forState:UIControlStateNormal];
[button setNeedsLayout];
[button layoutIfNeeded];

그리고 버튼 유형이 속성 관리자에서 '시스템'이 아닌 '사용자 정의'였는지 확인해야했습니다.




많은 솔루션을 시도한 후에 결론은 setTitle 대신 setAttributedTitle을 사용하는 것입니다.

AttributedString의 제목 문자열을 만들려면 :

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:@" new Test "];

[button setAttributedTitle:attString forState:UIControlStateNormal];

그런데이 문제는 보통 때로는 발생하지 않지만 주로 갑자기 다음과 같은 이유로 발생합니다.

  1. UIButton 의 활성화 된 상태를 변경하고 제목을 변경하려고 시도하십시오.

  2. 속성 값을 사용하고 setTitle을 사용하여 값을 변경하려는 경우, 속성 값이이 경우 제목보다 우수합니다.

  3. 다른보기 컨트롤러로 이동 한 다음 뒤로 돌아가서 단추 제목을 업데이트하는 경우




Related