根据选择更改UITableViewCell中按钮的背景颜色

时间:2013-03-12 18:47:52

标签: iphone ios uitableview uibutton

我有一个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为灰色,依此类推。我还没有想出办法。有什么建议吗?

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

4 个答案:

答案 0 :(得分:1)

我认为正确的方法 - 子类UITableViewCell并声明自己的协议将通知委托按下哪个单元格按钮,并在委托中循环遍历所有单元格并设置所有和红色的默认颜色选择的颜色。 我做了demo project

答案 1 :(得分: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个或更多部分,这种方式可能无法正常工作

答案 2 :(得分:0)

看看这个:How can I loop through UITableView's cells?

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

答案 3 :(得分:0)

试试这段代码:

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

}