0

ユーザーがお気に入りのアイテムを保存できるように、tableviewCells にスター ボタンを作成しようとしています。

私はこれまでにこれを試しました。

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];        
    }

    UIButton *CameraBreak=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    CameraBreak.frame=CGRectMake(260, 10, 60, 40);
    CameraBreak.tag=indexPath.row;
    [CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];

    [CameraBreak addTarget:self action:@selector(starClicked::) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:CameraBreak];  

    cell.textLabel.text = [titles objectAtIndex:indexPath.row];
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15];   

    return cell;
}

問題は、viewDidLoad のボタンが次のように表示されることです。 VIEWDIDLOAD

しかし、テーブルをスクロールすると、ボタンは次のように変化します。 スクロール時

この動作の理由を知っている人はいますか? そして、どうすればこれを解決できますか?

アップデート

選択されていない: ここに画像の説明を入力

選択済み: ここに画像の説明を入力

4

3 に答える 3

1

クラスaccessoryViewのプロパティを使用してみませんか。UITableViewCell

// create your button here...    
[cell setAccessoryView:cameraBreak]; // or cell.accessoryView = cameraBreak;

また、名前CameraBreakを に変更しcameraBreakます。camelCaseNotationを使用する必要があります。

これがうまくいくかどうか教えてください。

編集

この方法は次のアイデアにも役立ちます: if (Accessory selected) {show yellowstar.png } else (show graystar.png)

imageViewのプロパティを変更できますUITableViewCell

cell.imageView = // set the correct image

これを達成するのは本当に簡単です。テーブルビュー デリゲートの設定方法に従ってください。- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;特に、プロトコル メソッドを確認する必要があります。

于 2013-04-17T22:08:29.277 に答える