2011-11-02 2 views
17

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

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

- (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. Я просто не знаю, что я делаю неправильно. Есть идеи?

+0

* Я 100% уверен, что у меня есть в IBOutlets установлен правильно *, я надеюсь, что IBActions подключены правильно тоже? – beryllium

+0

Вы уверены, что установлено ваше действие? Поместите точку останова и проверьте. – logancautrell

+0

Появится следующее представление, и я поместил NSLogs в действие моего computeQuiz, которое появляется. Действия вызываются. – Link

ответ

16

Это не работает, потому что 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]; 

(. Второй вариант не будет сохранять форматирование)

+0

Все еще не уверен, почему это не помечено правильным ответом после 4 лет! – Prabhav

3

попробовать этот код ....

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]; 
1

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

- (IBAction)computeQuiz:(id)sender 

метод в методе

- (IBAction)jumpT10ResultsView:(id)sender 

, а затем вызвать одновременно на кнопки мыши, даже как одновременные, как и в ниже кода, вызов метода me приводит к отсутствию выделения объекта кнопки 5FootUniversalResults.

- (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]; 
} 
0

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

-1

попробовать:

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

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

0

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

change the text of an attributed UILabel without losing the formatting?

Смежные вопросы