-1

私はobj-cが初めてで、ボタンをクリックするとラベルが変更される単純なIBActionをコーディングしようとしています。画像の背景と静的な文字列ではうまく機能しますが、これでクラッシュすると:

int i = (arc4random()%90);
NSString *lab = [NSString stringWithFormat:@"%d", i];
[sender setText:lab];

なぜ?事前に

編集:これはメソッド全体です

-(IBAction) toggleUIButtonImage:(id)sender{
    NSString *img = @"bulldog-cute-tom-bancroft.jpg";
    NSString *imgSel = @"kitten-cute-tom-bancroft.jpg";
    UIImage *unselectedImage = [UIImage imageNamed:img];
    UIImage *selectedImage = [UIImage imageNamed:imgSel];
    if ([sender isSelected]) {
        [sender setBackgroundImage:unselectedImage forState:UIControlStateNormal];
        [sender setSelected:NO];
    }else {
        [sender setBackgroundImage:selectedImage forState:UIControlStateSelected];
        [sender setSelected:YES];
    }

    int i = (arc4random()%90);
    NSString *lab = [NSString stringWithFormat:@"%d", i];
    [sender setTitle:lab forState: UIControlStateNormal];

} 
4

3 に答える 3

2

ランダムな int または int2str 変換ではありません。ボタンのテキストを設定する方法です。これを使用すると、動作するはずです:

[sender setTitle: lab forState: UIControlStateNormal]; 

(もちろん、送信者が実際にUIButtonである場合)

編集:

UIButton *button = (UIButton *)sender; 

送信者から UIButton* (またはメソッドに応答させたいその他の特定のクラス) へのキャストは、適切なクラスメソッドで確実に作業できるようにするためにも推奨されます。

于 2012-07-10T10:32:05.147 に答える
2

UIButton のタイトルを設定しようとしています。そのためには、setTitle:forState:代わりにを使用する必要がありますsetText

[sender setTitle:lab  forState:UIControlStateNormal];

UIButton リファレンス : UIButton

編集:がidsenderのタイプの場合、次のように UIButton に変更します。

UIButton *b = (UIButton *)sender;

または、次のようにメソッド シグネチャを変更するだけです。

-(IBAction) toggleUIButtonImage:(UIButton *)sender
于 2012-07-10T10:33:11.130 に答える