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 个是灰色的,以此类推。我还没有想出办法来做到这一点。有什么建议么?

我可以更改从单元格中选择的按钮的颜色。但在同一情况下,先前选择的按钮和所有其他按钮(除了选定的按钮)应该是默认颜色。一次只会突出显示一个按钮,并且该按钮始终是该实例的选定按钮。

4

4 回答 4

1

我认为这样做的正确方法 - 子类化UITableViewCell并声明自己的协议,该协议将通知委托在哪个单元格按钮被按下,并在委托中 - 循环遍历所有单元格并为所有单元格设置默认颜色并为选定的红色设置。我做了演示项目

于 2013-03-12T19:33:01.293 回答
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 回答
0

看看这个:如何循环遍历 UITableView 的单元格?

循环遍历单元格并将“非活动”按钮设置为灰色。

于 2013-03-12T18:59:08.517 回答
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 回答