0

テーブルビューに簡単なチェックボックスを作成したい。まず、ストーリーボードでビューを作成し、すべての要素がセルでタグを取得します。次に、これをController.mでコーディングしました

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    UIButton  *checkbox = (UIButton *)[cell viewWithTag:103];
    checkbox.selected = NO;

    [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];

    [checkbox addTarget:self action:@selector(changeState:) forControlEvents:UIControlEventTouchUpInside];
    ...
}

-(void) changeState:(UIButton *)checkbox
{

    checkbox.selected = !checkbox.selected;
    if (checkbox.selected)
        [checkbox setBackgroundImage:[UIImage imageNamed:@"cCheckbox2px"] forState:UIControlStateSelected];
    else
       [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];

}

しかし、ボタンをタップしても画像は変わりません。これはなぜですか、どうすれば修正できますか? 手伝ってくれてありがとう!

4

3 に答える 3

1

このようにしてください

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    UIButton  *checkbox = (UIButton *)[cell viewWithTag:103];

    [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];
    [checkbox setBackgroundImage:[UIImage imageNamed:@"cCheckbox2px"] forState:UIControlStateSelected];

    [checkbox addTarget:self action:@selector(changeState:) forControlEvents:UIControlEventTouchUpInside];
    ...
}

-(void) changeState:(UIButton *)checkbox
{

    checkbox.selected = !checkbox.selected;
}
于 2013-11-05T11:12:54.490 に答える
1

これは、cellForRowAtIndexPath: checkbox.selected = NO;を呼び出すたびに、選択したプロパティがFALSEになるためです。その後、 changeState:で、

checkbox.selected = !checkbox.selected;

選択したプロパティをTRUEに変更します。そのため、ボタンをタップするたびに、選択したプロパティがTRUEになるだけです。したがって、checkbox.selected = NO;を移動します。if(cell == nil)状態の内側へ

于 2013-11-05T11:10:44.933 に答える
0

ボタンタップイベントで指定したコードは必要ないと思います。状態を変更するだけで十分です。

    if (checkbox.selected)
        [checkbox setBackgroundImage:[UIImage imageNamed:@"cCheckbox2px"] forState:UIControlStateSelected];
    else
       [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];

UIControlStateSelectedただし、 で両方の州 (とUIControlStateNormal)のイメージを指定する必要がありますcellForRowAtIndexPath

于 2013-11-05T11:08:58.957 に答える