2

私はUITableViewを持っています。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//Where we configure the cell in each row

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;

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


self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.myButton.tag = 5;
self.myButton.frame = CGRectMake(190.0f, 5.0f, 70.0f, 25.0f);
self.myButton.layer.borderColor = [UIColor blackColor].CGColor;
self.myButton.layer.borderWidth = 0.5f;
self.myButton.backgroundColor = [UIColor grayColor];
[self.myButton setTitle:@"Set Active" forState:UIControlStateNormal];
[self.myButton addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview: self.myButton];

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

}

-(void) myButton:(id)sender{
[sender setBackgroundColor:[UIColor redColor]];
}

tableview セクションに 3 つの行があるとします。私は3列にボタンを持っています。最初のインスタンスでは、最初の行のボタンは赤色で、他の 2 行は灰色である必要があります。2行目のボタンを選択すると、2行目のボタンは赤になり、他の2つは灰色になります。私はそれを行う方法を考え出していません。助言がありますか?

セルから選択したボタンの色を変更できます。ただし、同時に、以前に選択したボタンと他のすべてのボタン (選択したボタンを除く) はデフォルトの色にする必要があります。一度に 1 つのボタンだけが強調表示され、そのインスタンスで常にそのボタンが選択されます。

4

4 に答える 4

1

簡単な方法は、ボタンごとに異なるタグを設定することです。このような:

button.tag = indexPath.row + c;

'c' が定数の場合。そしてあなたの方法では:

-(void) myButton:(id)sender{
     for( int i=0; i<numberOfRowsInTable; ++i )
        [(UIButton *)[self.view viewForTag:i+c] setBackgroundColor:[UIColor grayColor]];
     [(UIButton *)sender setBackgroundColor:[UIColor redColor]];
}

ただし、テーブルに 2 つ以上のセクションがある場合、この方法は機能しない可能性があります

于 2013-03-13T05:04:01.367 に答える
1

私はこれを行う正しい方法だと思います-サブクラスUITableViewCell化して、どのセルボタンが押されたかデリゲートに通知する独自のプロトコルを宣言し、デリゲートで-すべてのセルをループし、すべてのデフォルトの色を設定し、選択した色を赤色に設定します。デモプロジェクトを作りました

于 2013-03-12T19:33:01.293 に答える
0

このコードを試してみてください:

-(void) myButton:(id)sender{
    NSLog(@"sender Tag=== %d",[sender tag]);
    UIButton *btn=(UIButton *)sender;
    [btn setBackgroundColor:[UIColor redColor ]];

}
于 2013-03-13T05:30:35.227 に答える
0

これを見てください: UITableViewのセルをループするにはどうすればよいですか?

セルをループし、「非アクティブ」ボタンをグレーに設定します。

于 2013-03-12T18:59:08.517 に答える