2011-11-02 15 views
17

Sto provando a impostare il testo di un UIButton su una nuova vista quando si preme un pulsante "Avanti" da una vista precedente. Ho impostato correttamente IBOutlet e ho cercato dappertutto risposte a questo, ma non funziona affatto.UIButton setTitle forState Not Working

Ecco un esempio di quello che sto cercando di fare:

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

Queste azioni sono entrambi collegati a un pulsante su una vista precedente. La vista carica bene e tutto, l'unico problema è il testo NON cambierà sul pulsante. Sono sicuro al 100% di avere gli IBOutlet impostati correttamente, ma non so cosa sto facendo male. Qualche idea?

+0

* Sono sicuro al 100% ho le IBOutlets impostate correttamente *, spero IBActions siano collegati correttamente troppo? – beryllium

+0

Sei sicuro che la tua azione è impostata? Inserisci un punto di interruzione e verifica. – logancautrell

+0

La vista successiva viene visualizzata e ho inserito NSLogs nell'azione ComputeQuiz visualizzata. Le azioni vengono chiamate. – Link

risposta

16

Non funziona perché IB imposta attributedTitle anziché title.

Prova a modificare:

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

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

O, in alternativa:

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

(. La seconda opzione non mantiene la formattazione)

+0

Ancora non sono sicuro del motivo per cui questa non è contrassegnata come risposta corretta dopo 4 anni! – Prabhav

3

provare questo codice ....

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

Prova chiamando

- (IBAction)computeQuiz:(id)sender 

metodo nel metodo

- (IBAction)jumpT10ResultsView:(id)sender 

piuttosto che chiamare simultaneamente su clic del pulsante anche se come in simultanea sotto il codice, la chiamata del metodo me non comporta alcuna assegnazione dell'oggetto FiveFootUniversalResults button.

- (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

Questo può succedere anche se si dimentica di usare il @synthesize sul pulsante o variabili ad essa correlata.

-1

prova:

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

Forse lo sfondo co è uguale al colore del titolo. Non vedrai nulla quando scrivi su carta nera con una penna nera. Prova a impostare il colore di sfondo o il colore del titolo prima di chiamare setTitle.