我在自定义视图中实用地放置了一些自定义类型的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)。当我尝试在模拟器上运行它时,我得到了正确的结果。单击鼠标时,该按钮会突出显示。
修改 我想我找出了确切的问题(仍在寻找解决方案)。如果我在按钮上精确地触摸并且触摸不覆盖插图的任何部分,则突出显示起作用。但是,如果触摸覆盖按钮的一部分以及插图/外部的一部分,则突出显示不起作用。
答案 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];