UIButton setTitle forState не работает

Я пытаюсь установить текст UIButton в новом представлении, когда кнопка «Далее» нажата из предыдущего представления. Я правильно настроил IBOutlet и просмотрел все ответы на этот вопрос, но он просто не работает.

Вот пример того, что я пытаюсь сделать:

- (IBAction)computeQuiz:(id)sender
{  
    [fiveFootUniversalResults setTitle:@"Test" forState:UIControlStateNormal];
}

- (IBAction)jumpT10ResultsView:(id)sender
{       
    NSString *nibFileToLoad = @"JumpT10Results";

    UIDevice *device = [UIDevice currentDevice];

    if([device userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    {
        nibFileToLoad = [nibFileToLoad stringByAppendingString:@"-iPad"];
    }

    JumpmasterPathfinderViewController *nextView = [[JumpmasterPathfinderViewController    alloc] initWithNibName:nibFileToLoad bundle:nil];

    // Modal view controller
    nextView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:nextView animated:YES];

    [nextView release];

    [scrollView setContentSize:CGSizeMake(imageViewWidth, imageViewHeight + 44.0)];
}

Эти действия связаны с кнопкой в ​​предыдущем представлении. Представление загружается нормально и все, единственная проблема в том, что текст НЕ БУДЕТ меняться на кнопке. Я на 100% уверен, что у меня правильно настроены IBOutlets, я просто не знаю, что я делаю неправильно. Любые идеи?


person Link    schedule 02.11.2011    source источник
comment
Вы уверены, что ваше действие установлено? Поставьте точку останова и проверьте.   -  person logancautrell    schedule 02.11.2011
comment
Я на 100 % уверен, что у меня правильно настроены IBOutlets. Надеюсь, IBActions тоже подключены правильно?   -  person beryllium    schedule 02.11.2011
comment
Появится следующее представление, и я поместил NSLogs в свое действие ComputeQuiz, которое появляется. Действия вызываются.   -  person Link    schedule 02.11.2011
comment
В данном случае что-то не так с fiveFootUniversalResults. это кнопка roundedRect, есть ли у нее изображение?   -  person beryllium    schedule 03.11.2011
comment
Сначала у меня это была кастомная кнопка. Затем, поскольку ничего не работало, я удалил кнопку и создал новую кнопку roundedRect по умолчанию и прикрепил к ней IBOutlet. Еще ничего.   -  person Link    schedule 03.11.2011
comment
Вы вызываете метод calculateQuiz: до или после появления представления?   -  person Alexander    schedule 11.11.2011
comment
Можете ли вы отладить это с помощью этого кода if(fiveFootUnivarsalResults) NSLog(@button exists); иначе NSLog(@btn не существует);   -  person Bharat Jagtap    schedule 16.12.2011
comment
Сколько кнопок вы используете и название какой кнопки пытаетесь изменить?   -  person Anand    schedule 16.12.2011
comment
@Link У вас когда-нибудь это работало? Я сталкиваюсь с той же проблемой.   -  person Dan P.    schedule 09.12.2012
comment
Может iOS 7.1? У меня тоже странное поведение с iOS 7.1. Необходимо установить значения Normal и Selected. До версии 7.1 для всех состояний было достаточно установить только значение «Нормальный» в качестве значения по умолчанию... Ой, извините, я только что увидел, что это было опубликовано в 2011 году...   -  person Big Papoo    schedule 17.03.2014


Ответы (6)


Это не работает, потому что IB устанавливает attributedTitle вместо title.

Попробуйте это вместо этого:

NSAttributedString *attributedTitle = [self.myButton attributedTitleForState:UIControlStateNormal];
NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithAttributedString:attributedTitle];
[mas.mutableString setString:@"New Text"];

[self.myButton setAttributedTitle:mas forState:UIControlStateNormal];

Или, альтернативно:

[self.myButton setAttributedTitle:nil forState:UIControlStateNormal];
[self.myButton setTitle:@"New Text" forState:UIControlStateNormal];

(Второй вариант не сохранит ваше форматирование.)

person Aaron Brager    schedule 26.11.2013
comment
До сих пор не уверен, почему это не помечено как правильный ответ через 4 года! - person Prabhav; 11.07.2017
comment
Чувствую себя глупо, что мне нужно было добраться до этого, чтобы понять это, но, вероятно, сэкономил мне часы отладки. - person Vlad Rusu; 04.03.2020

попробуй этот код....

UIButton *backbtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 68, 38)];
[backbtn setTitle:@"Your string" forState:UIControlStateNormal];
//[backbtn setImage:[UIImage imageNamed:@"BackBtn.png"] forState:UIControlStateNormal];
[backbtn addTarget:self action:@selector(backBtnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:backbtn];
person Anshul Jain    schedule 16.12.2011

Попробуйте позвонить

- (IBAction)computeQuiz:(id)sender 

метод в

- (IBAction)jumpT10ResultsView:(id)sender

метод вместо одновременного вызова при нажатии кнопки, даже такого же одновременного, как в приведенном ниже коде, вызов метода me не приводит к выделению объекта кнопки FiveFootUniversalResults.

- (IBAction)computeQuiz:(id)sender
{  
    [fiveFootUniversalResults setTitle:@"Test" forState:UIControlStateNormal];
}

- (IBAction)jumpT10ResultsView:(id)sender
{       
    NSString *nibFileToLoad = @"JumpT10Results";

    UIDevice *device = [UIDevice currentDevice];

    if([device userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    {
        nibFileToLoad = [nibFileToLoad stringByAppendingString:@"-iPad"];
    }
    JumpmasterPathfinderViewController *nextView = [[JumpmasterPathfinderViewController    alloc] initWithNibName:nibFileToLoad bundle:nil];

    // Modal view controller
    nextView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:nextView animated:YES];

    [nextView release];

    [scrollView setContentSize:CGSizeMake(imageViewWidth, imageViewHeight + 44.0)];
    [self computeQuiz:nil];
}
person Nikita Sharma Sahu    schedule 06.12.2012

Это также может произойти, если вы забыли использовать @synthesize на кнопке или связанных с ней переменных.

person Daniel Lima    schedule 04.04.2013

Ответ по ссылке ниже помог мне, когда у меня была такая же проблема. Это позволило мне сохранить все атрибуты в словаре. Я создал новую строку атрибутов с другим текстом, но с теми же атрибутами, которые затем добавил к кнопке, которую хотел изменить. Надеюсь это поможет.

изменить текст атрибута UILabel без потери форматирования?

person antonkronaj    schedule 25.02.2015

пытаться:

[fiveFootUniversalResults setBackgroundColor:[UIColor redColor]];
[fiveFootUniversalResults setTitle:@"Test" forState:UIControlStateNormal];

Возможно, цвет фона совпадает с цветом заголовка. Вы ничего не увидите, когда будете писать черной ручкой на черной бумаге. Попробуйте установить цвет фона или цвет заголовка перед вызовом setTitle.

person dadoftutu    schedule 25.03.2014