[英]change the UIButton image in UITableView UIButton click
在UITableView cellForRowAtIndexPath
创建一个带有一个图像的按钮。 为该按钮单击写操作以更改按钮图像。 这里的代码。
ButtonImage = [UIImage imageNamed:@"work_exe_old.png"];
myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
myButton.frame = CGRectMake(250,10,34,34);
myButton.tag=22;
[myButton setBackgroundImage:ButtonImage forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(select_id:)forControlEvents:UIControlEventTouchDown];
- (IBAction)select_id:(id)search
{
UIButton *tempBtn =(UIButton *) search;
[tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal];
}
单击按钮图像已更改( work_exe.png )。 再次单击同一按钮意味着图像要更改( work_exe_old.png ) 表格视图中的类似复选框。 我怎样才能做到
不用这种方式,您可以更好地自定义代码。 检查以下代码:
ButtonImage = [UIImage imageNamed:@"work_exe.png"];
ButtonImageSelected = [UIImage imageNamed:@"work_exe_old.png"];
myButton = [UIButton buttonWithType:UIButtonTypeCustom];
myButton.frame = CGRectMake(250,10,34,34);
myButton.tag=22;
[myButton setBackgroundImage:ButtonImage forState:UIControlStateNormal];
[myButton setBackgroundImage:ButtonImageSelected forState:UIControlStateSelected];
[myButton addTarget:self action:@selector(select_id:)forControlEvents:UIControlEventTouchDown];
您可以像下面这样实现选择器方法:
-(IBAction)select_id:(UIButton *) tempBtn {
[tempBtn setSelected:! tempBtn.selected];
}
如果要通过单击UITableViewCell来执行操作,则必须实现didSelectRowAtIndexPath并在进行decalre int i;
之前int i;
然后按照下面的代码对Button图像进行更改
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
switch (i) {
case 0:
if(indexPath.row==0)
[tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal];
}
else if (indexPath.row==1)
{
[tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal];
}
else if (indexPath.row==2)
{
[tempBtn setImage:[UIImage imageNamed:@"work_exe.png"] forState:UIControlStateNormal];
}
.
.
.
else if (indexPath.row==n)
{
[tempBtn setImage:[UIImage imageNamed:@"work_exeN.png"] forState:UIControlStateNormal];
}
i=1;
break;
case 1:
if(indexPath.row==0)
[tempBtn setImage:[UIImage imageNamed:@"work_exe0.png"] forState:UIControlStateNormal];
}
else if (indexPath.row==1)
{
[tempBtn setImage:[UIImage imageNamed:@"work_exe1.png"] forState:UIControlStateNormal];
}
else if (indexPath.row==2)
{
[tempBtn setImage:[UIImage imageNamed:@"work_exe2.png"] forState:UIControlStateNormal];
}
.
.
.
else if (indexPath.row==n)
{
[tempBtn setImage:[UIImage imageNamed:@"work_exeN.png"] forState:UIControlStateNormal];
}
i=0;
break;
default:
break;
}
[yourtablename reloadData];
注意:在cellForRowAtIndexPath
方法之后编写此代码
设置uibutton的每个控制状态的背景图片,
例如
UIImage *normal = [UIImage imageNamed:@"work_exe.png"];
UIImage *highlighted = [UIImage imageNamed:@"work_exe_old.png"];
UIImage *selected = [UIImage imageNamed:@"work_exe_old.png"];
[myButton setBackgroundImage:normal forState:UIControlStateNormal];
[myButton setBackgroundImage:highlighted forState:UIControlStateHighlighted];
[myButton setBackgroundImage:selected forState:UIControlStateSelected];
我不确定天气我了解你的意思。 如果希望单击后更改图像,则应将图像的当前状态保存在某个位置,例如保存在NSInteger中,该NSInteger将单元格的状态保存为代表应显示哪个图像的数字。 在tableView:cellForRowAtIndexPath:方法中,将正确的图像(根据您的NSInteger)放入单元格中。
@interface MyTabelViewClass()
@property (assign) NSInteger currentImageState;
...
@end
在tableView:cellForRowAtIndexPath:方法中,您必须根据以下属性决定要选择的图像:
switch (self.currentImageState) {
case 0:myCell.imageView = [[UIImageView imageViewWithImage:[UIImage imageNamed:@"..."]]; break;
case 1:myCell.imageView = [[UIImageView imageViewWithImage:[UIImage imageNamed:@"..."]]; break;
...
}
在tableView:didSelectRowAtIndexPath中,您必须在某处更改状态,例如
self.currentImageState = (self.currentImageState + 1) % maximumNumberOfStates;
...
[self.myTableView reloadData]
...
延迟调用reloadData是个好主意,因为您要等待取消选择动画先完成。 您可以通过致电
[self.myTableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.35]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.