繁体   English   中英

更改UITableView中的UIButton图像,然后单击UIButton

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM