1

ボタンを追加するのに問題がありますUITableViewCell。セルには2つUILabelのsと2つUIImageViewのsUIImageViewがあり、画像が含まれる場合とボタンが含まれる場合があります。

ここに画像の説明を入力してください

私のUITableViewCellサブクラスには次のものがあります。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if ( self ) {
        // Initialization code

    firstLock = [[UILabel alloc]init];
    [firstLock setBackgroundColor:[UIColor clearColor]];
    firstLock.textAlignment = UITextAlignmentLeft;
    firstLock.font = [UIFont fontWithName:@"Arial-BoldMT" size:17];

    secondLock= [[UILabel alloc]init];
    [secondLock setBackgroundColor:[UIColor clearColor]];
    secondLock.textAlignment = UITextAlignmentRight;
    secondLock.font = [UIFont fontWithName:@"Arial-BoldMT" size:17];

    firstLockImage = [[UIImageView alloc]init];

    secondLockImage = [[UIImageView alloc] init];

    [self.contentView addSubview:firstLock];
    [self.contentView addSubview:secondLock];
    [self.contentView addSubview:firstLockImage];
    [self.contentView addSubview:secondLockImage];
    }
    return self;
}

の1つUIImageViewが単なる画像の場合は問題ありませんが、UIButton(画像化された)をサブビューとして追加するとクラッシュします。

UITableViewDataSource実装では:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{



UIImage *btnImage = [UIImage imageNamed:@"bike_ok.png"];

UIButton *button =[UIButton alloc];
[button setImage:btnImage forState:UIControlStateNormal];

[cell.secondLockImage addSubview:button];

画像ビューのサブビューとしてボタンを追加すると、クラッシュします。

 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Requesting the window of a view (<UIButton: 0x7bac7d0; frame = (0 0; 0 0); transform = [0, 0, 0, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = (null)>) with a nil layer. This view probably hasn't received initWithFrame: or initWithCoder:.'
*** First throw call stack:

私は何が欠けていますか?

ありがとう!

追加するだけです!その重要なこの行

    [firstLockImage setUserInteractionEnabled:YES];
    [secondLockImage setUserInteractionEnabled:YES];

UIImageViewにはデフォルトでNOがあり、ボタンがないとボタンが機能しないためです。

4

3 に答える 3

5

クラッシュエラーを読むと、問題がどこにあるかを簡単に確認できます。ボタンを初期化していません。

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0,0,0,0)];

または、initWithCoderを使用できます。

お役に立てれば

サム

于 2012-09-05T08:44:01.210 に答える
1

例外テキストを読んでください-それは言います:

このビューは、おそらくinitWithFrame:またはinitWithCoder:を受け取っていません。

質問の数行だけで、メッセージを送信したのは1つだけで、メッセージを送信していないインスタンスにメッセージを送信していUIButtonます。それはあなたのエラーです。allocinit...

さらに、alloc/initペアUIButtonはクラスクラスターであるため、直接呼び出すべきではなく、通常は+[UIButton buttonWithType:]ボタンインスタンスを取得するために使用する必要があります。

編集私は実際にそれについて100%確信していません。initWithFrame:しかし、あなたがそうするとあなたが何を得るのか正確にはわかりません。そうすれば、私buttonWithType:はあなたが望むものであるカスタムボタンを手に入れることになります。編集終了

したがって、その行を次のように変更します。

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

お役に立てれば!

于 2012-09-05T08:43:51.287 に答える
1

UIButton *button =[UIButton alloc];alloc w / o init?)をに変更します

UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];
//set frame
[button setFrame:(CGRect){x,y,w,h}];

+buttonWithTypeUIButtonオブジェクトのalloc/initを処理します

于 2012-09-05T08:51:00.600 に答える