UIButton不会改变touchUpInside的背景

时间:2013-12-07 02:33:45

标签: ios iphone ipad

我在自定义视图中实用地放置了一些自定义类型的UIButtons。该视图基本上是一个菜单。我在视图的.m文件中生成带有以下代码的按钮:

-(void) generateButtons: (NSMutableArray *) buttonsArray
{
   UIImage *barItemImage = [[UIImage imageNamed:@"ipad-menubar-button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];

   float buttonWidth = (self.frame.size.width - (2 * FIRSTBUTTONXCOORDINATE) - 25)/ 6.0f;
   float xCoord = FIRSTBUTTONXCOORDINATE;
   float yCoord = (self.frame.size.height - BUTTONHEIGHT) / 2.0f;
   for (int i = 0; i < buttonsArray.count; i++)
   {
       NSString* buttonTitle = [buttonsArray objectAtIndex:i];
       UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
       [button addTarget:self
               action:@selector(botButtonAction:)
        forControlEvents:UIControlEventTouchUpInside];

       [button setTitle:buttonTitle forState:UIControlStateNormal];
       button.frame = CGRectMake(xCoord, yCoord, buttonWidth, BUTTONHEIGHT);
       button.tag = i;
       [button setBackgroundImage:barItemImage forState:UIControlStateNormal];
       xCoord += buttonWidth + 5;
       [self addSubview:button];
   }
}

在touchUpInside上,调用botButtonAction并执行它应该执行的操作。但是,按钮通常不会提供touchUpInside的任何视觉指示。当我在按钮上 touchDown 并向任何方向滑动时,我看到背景颜色变深。有时,我在touchUpInside上看到相同的视觉指示。这似乎完全随机。

关于我在这里做错了什么的任何想法?

编辑:对不起,我已经忙于其他问题了。这是botButtonAction的代码及其调用的方法

-(void) botButtonAction: (UIButton *) sender
{
 if (self.delegate)
    [self.delegate optionsMenuAction:self data:sender.tag];
}

 -(void)optionsMenuAction:(OptionsMenueView *)view data:(int)tag
 {
     if (self.PDFVC)
     {
         [self.navigationController popToViewController:self animated:YES];
     }

     if (!self.optionsMenue.isAtWPC || tag != WPC)
         [self transitionFromViewAtIndex:self.selectedVCIndex toView:tag];

    else
         [self transitionFromViewAtIndex:self.selectedVCIndex toView:WPList];
}

但由于我使用的是touchUpInside,因此不会在touchDown上调用这些方法。我只是希望按钮在touchDown上为highLight(灰色bg一点点)。正如我之前所述,这发生在touchDown和swipe。

修改 到目前为止,我一直在实际设备上运行它(iPad air和iPad 2)。当我尝试在模拟器上运行它时,我得到了正确的结果。单击鼠标时,该按钮会突出显示。

修改 我想我找出了确切的问题(仍在寻找解决方案)。如果我在按钮上精确地触摸并且触摸不覆盖插图的任何部分,则突出显示起作用。但是,如果触摸覆盖按钮的一部分以及插图/外部的一部分,则突出显示不起作用。

4 个答案:

答案 0 :(得分:1)

添加以下行:

[button setBackgroundImage:HighlightImage forState:UIControlStateHighlighted];

答案 1 :(得分:0)

将此代码放在botButtonAction中:

-(void)botButtonAction:(UIButton *)sender
{
    [sender setBackgroundImage:[UIImage imageNamed:@"some iamge.png"] 
                                                 forState:UIControlStateNormal];
}

或使用以下代码for for循环

[button setBackgroundImage:[UIImage imageNamed:@"back_button_press.png"] forState: UIControlStateHighlighted];

或者如果你想提供一些颜色,然后设置按钮颜色

答案 2 :(得分:0)

按下按钮时更改标题颜色

[yourButon setTitleColor:[UIColor colorYouWant] forState:UIControlStateHighlighted];
希望这会对你有所帮助......

答案 3 :(得分:0)

我也有过这个问题。这些其他答案将为您提供正常寻求的结果。但是....你正在使用[UIButton buttonWithType:UIButtonTypeCustom] ..如果你没有分配/初始化UIButton,这真的很麻烦。尝试将这一行更改为正常的按钮分配,然后添加以下几行答案这个帖子。这应该适合你。

简而言之,

替换[UIButton buttonWithType:UIButtonTypeCustom];[[UIButton alloc] init];

然后在代码中添加以下更改以更改图像。

[myNewlyAllocatedButton setBackgroundImage:[UIImage imageNamed:@"back_button_press.png"] forState: UIControlStateHighlighted];