Eu tenho um UIButton
, que quando pressionado, abre uma nova visualização onde o usuário pode alterar algumas configurações. Quando a exibição for descartada, gostaria de atualizar o título / texto do UIButton
para refletir o novo estado. Estou ligando:
[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];
Mas nunca parece mudar do texto / título original conforme especificado no IB.
ios
iphone
uibutton
uicontrolstate
George Armhold
fonte
fonte
Respostas:
Você tem o botão especificado como um IBOutlet em sua classe de controlador de visualização e ele está conectado corretamente como um outlet no Interface Builder (ctrl arraste do novo outlet de referência para o proprietário do arquivo e selecione seu objeto UIButton)? Geralmente é esse o problema que tenho quando vejo esses sintomas.
Editar: Embora não seja o caso aqui, algo como isso também pode acontecer se você definir um título atribuído ao botão e, em seguida, tentar alterar o título e não o título atribuído.
fonte
Resolvi o problema apenas definindo o parâmetro title para UIControlStateNormal, e ele funciona automaticamente nos outros estados. O problema parece ser quando você define outro UIControlState.
fonte
A partir do Swift 4:
fonte
Eu descobri outro problema. Pode ser um bug introduzido no iOS 5, mas pensei em apontá-lo para qualquer pessoa que o encontrasse.
Se você não definir nenhum texto padrão para o botão no XIB, nenhum texto aparecerá se você defini-lo programaticamente. E se você definir o texto no XIB, qualquer texto que você atribuir posteriormente ao botão programaticamente será truncado para o tamanho do texto padrão.
E, finalmente, se você estiver mostrando a visualização com seu botão e, em seguida, invocar outra visualização (como uma ActionSheet) e dispensá-la, o texto que você atribuiu ao botão programaticamente será apagado e a legenda do botão retornará ao que você definiu no XIB.
fonte
Mesmo que o problema do Caffeine Coma tenha sido resolvido, eu gostaria de oferecer outra causa potencial para o título não aparecer em um UIButton.
Se você definir uma imagem para o UIButton usando
Pode cobrir o título. Descobri isso da maneira mais difícil e imagino que alguns de vocês acabem lendo esta página pelo mesmo motivo.
Use este método
para a imagem do botão e o título não serão afetados.
Eu testei isso com botões criados programaticamente e botões criados em um .xib
fonte
para rápido:
fonte
Acontece que os documentos lhe dizem a resposta! O UIButton irá ignorar a mudança do título se já tiver uma String de Atributo para usar (parece ser o padrão que você obtém ao usar o construtor de interface Xcode).
Usei o seguinte:
fonte
Mais uma causa possível é esta:
Se você tentar definir o título do botão no
(id)initWithNibName: ...
método, então você é propriedade de botão ainda será nulo. Ainda não foi atribuído ao UIButton.Você deve ter certeza de que está configurando seus botões em um método como
(void)viewWillLoad
ou(void)viewWillAppear
, mas provavelmente não deseja configurá-los tão tarde quanto(void)viewDidAppear
.fonte
Às vezes, pode ficar muito complicado. A maneira mais fácil é " atualizar " a visualização do botão!
fonte
Continuei tendo problemas com isso, a única solução era adicionar uma imagem e rotular como subvisualizações ao uibutton. Então descobri que o principal problema era que estava usando um UIButton com o título: Atribuído. Quando eu mudei para Plain, apenas definir o titleLabel.text fez o truque!
fonte
@funroll está absolutamente certo. Aqui você pode ver o que você precisa. Certifique-se de que a função seja executada apenas no thread principal . Se você não quiser lidar com tópicos, pode fazer assim, por exemplo: criar NSUserDefaults e em ViewDidLoad a condição de verificação foi pressionada em outra View ou não (em outra View definida em NSUserDefaults informações necessárias) e dependendo das condições definidas título necessário para seu UIButton, então [yourButton setTitle: @ "Title" forState: UIControlStateNormal];
fonte
Certifique-se de que você está no tópico principal.
Caso contrário, ele ainda salvará o texto do botão. Ele estará lá quando você inspecionar o objeto no depurador. Mas isso não atualizará a visualização.
fonte