【问题标题】:How to change button image added to TableView section header如何更改添加到 TableView 部分标题的按钮图像
【发布时间】:2013-04-26 06:16:38
【问题描述】:

我在部分标题中添加了一个按钮,该按钮显示点击它的视图。我的需要是在显示视图时显示“向上箭头”图像,在隐藏视图时显示“向下箭头”图像。

我怎样才能做到这一点?请帮帮我...

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
            [btn setFrame:CGRectMake(0, 0, 316, 60)];
            [btn setTag:section];
            [aView addSubview:btn];
            [btn addTarget:self action:@selector(sectionTapped:) forControlEvents:UIControlEventTouchDown];
            btn.backgroundColor=[UIColor clearColor];

}

【问题讨论】:

    标签: ios uitableview uibutton


    【解决方案1】:

    我建议您可以使用 2 张图片 - 1 张用于“向上”箭头,1 张用于“向下”箭头。 将默认图像设置为状态 UIControlStateNormal 的 btn,并将其他图像设置为状态 UIControlStateSelected。 现在在您的 sectionTapped: 方法中只需更改按钮的状态。 因此,当您显示或隐藏视图时,您需要将按钮设置为选择是/否。

    希望这会有所帮助。

    【讨论】:

    • 我要添加的按钮实际上是节标题,我需要在此按钮右侧进行更改。那么,我是否需要在右侧再添加一个按钮或图像视图......
    • 否。您可以使图像在右侧显示箭头,并且在剩余区域可能是透明的。将此图像设置为按钮。不需要有 ImageView。
    • 但实际上按钮的宽度部分标题是正确的......那么怎么来......这个按钮右侧的图像应该很小......请如何处理这个......
    • 使用像PhotoShop这样的软件,可以创建一些部分透明的图像,而某些部分的可见图像组合在一个图像中。如果你能有这样的图像会更容易。所以基本上你可以拥有与按钮宽度相同的图像。将此图像设置为按钮作为背景。不需要有 ImageView。
    【解决方案2】:

    我以前在我的一个应用中做过这个。

    将此代码作为Reference

    1.具体方法。

    - (void)methodName:(UIButton *)sender
     {
     int i = [sender.titleLabel.text intValue];
     NSNumber *numb;
    if(i == 0)
    {
        numb = [NSNumber numberWithBool:NO];
       sender.titleLabel.text = @"1";
       [sender setImage:[UIImage imageNamed:@"down.png"] forState:UIControlStateNormal];
       [sender setImage:[UIImage imageNamed:@"up.png"] forState:UIControlStateHighlighted];
     }
    else
    {
    numb = [NSNumber numberWithBool:YES];
    sender.titleLabel.text = @"0";
    [sender setImage:[UIImage imageNamed:@"up.png"] forState:UIControlStateNormal];
    [sender setImage:[UIImage imageNamed:@"down.png"] forState:UIControlStateHighlighted];
    }
    }
    

    2.在UITabelview viewForHeaderInSection中以编程方式设置UIButton。

     UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(240, 20, 30, 30)];
    
    [button addTarget:self
           action:@selector(methodName:)
     forControlEvents:UIControlEventTouchDown];
     button.tag = section;
     if([[sectionsArray objectAtIndex:section] boolValue])
     {
    [button setImage:[UIImage imageNamed:@"up.png"] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:@"down.png"] forState:UIControlStateHighlighted];
    button.titleLabel.text = @"0";
     }
     else
     {
      [button setImage:[UIImage imageNamed:@"down.png"] forState:UIControlStateNormal];
       [button setImage:[UIImage imageNamed:@"up.png"] forState:UIControlStateHighlighted];
      button.titleLabel.text = @"1";
      }
    

    【讨论】:

    • 我已将按钮添加到总节标​​题中,例如“didSelectRowAtIndexpath”功能......我需要在此按钮的右侧显示该场景......如何继续......
    • 您只需要在第二种方法中设置 UIButton 的框架即可。
    【解决方案3】:

    您可以尝试使用 BOOL 来检查按钮是否已被按下,并通过动画将按钮中的图像旋转为向上或向下。

    -(IBAction)dropdownBtnClicked:(id)sender 
    {
    
          [UIView beginAnimations:nil context:NULL];
    
          [UIView setAnimationDuration:0.5];
    
          if (!isDropdownEnabled) 
          { 
             //BOOL - checking if the button has been pressed or not
    
              isDropdownEnabled=TRUE;
              drpDwnBtn.transform=CGAffineTransformMakeRotation(270/180*M_PI);
          }
    
          else 
          {
    
              isDropdownEnabled=FALSE;
    
              drpDwnBtn.transform=CGAffineTransformMakeRotation(0);
    
           }
    
          [UIView commitAnimations];
    
      }
    

    【讨论】:

    • 如果您希望按钮成为该图像,您可以简单地转到按钮属性并设置背景图像,但是由于您以编程方式进行,您可以通过添加这段代码来做到这一点 - [btn setImage:[UIImage imageNamed:@"updownimage.png"] forState:UIControlStateNormal];
    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2023-03-19
    • 2020-03-22
    • 2012-02-29
    • 2021-04-06
    • 1970-01-01
    • 2019-04-01
    • 2023-03-06
    相关资源
    最近更新 更多