2011-11-02 10 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

私はIBActionsが正しくあまりにも接続されている願って、私はIBOutletsが正しく設定されている* 100%確信していますか*? – beryllium

+0

アクションが設定されていますか?ブレークポイントを入れて確認してください。 – logancautrell

+0

次のビューが表示され、私はcomputeQuizアクションにNSLogを配置しました。アクションが呼び出されています。 – Link

答えて

16

IBがtitleではなくattributedTitleに設定されているため、機能しません。

代わりにこれを試してみてください:

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

(第2のオプションは、あなたの書式を保持しません。)

+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)jumpT10ResultsView:(id)sender 

方法で

- (IBAction)computeQuiz:(id)sender 

メソッドを呼び出して試してみてください....このコードを試してみてくださいコードの下で、メソッドの呼び出しによって、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]; 
} 
0

これは、ボタンまたはその関連変数に@synthesizeを使用することを忘れた場合にも発生します。

-1

試してみてください。

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

多分背景の共同lorはタイトルカラーと同じです。黒いペンで黒い紙に書くときに何も見えません。 setTitleを呼び出す前に背景色またはタイトルの色を設定してください。

0

私は同じ問題があったとき、以下のリンクの答えが私を助けました。それは、辞書のすべての属性を保存することができました。私は別のテキストで同じ属性を持つ新しい属性付き文字列を作成し、変更したいボタンに追加しました。お役に立てれば。

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

関連する問題