UIButton 未在边框上突出显示

Posted

技术标签:

【中文标题】UIButton 未在边框上突出显示【英文标题】:UIButton not highlighted on border 【发布时间】:2015-05-20 10:29:25 【问题描述】:

我使用以下代码以编程方式创建了一个 UIButton:

myButton = [UIButton new];
[myButton setImage:[UIImage imageNamed:@"myButtonNormal"]
                              forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"myButtonBackgroundNormal"]
                                        forState:UIControlStateNormal];
myButton.alpha = MY_BUTTON_ALPHA;

[myButton addTarget:self
             action:@selector(myButtonSelector:)
   forControlEvents:UIControlEventTouchUpInside];

[self.parentViewController.view insertSubview:myButton 
                                      atIndex:10];

现在我遇到的问题是在点击按钮时突出显示按钮。它工作得很好,即点击按钮颜色会改变,除非我点击按钮左侧的边框。为了说明这一点:

当点击按钮的绿色部分时,一切都很好,按钮被突出显示。单击红色部分时,将调用按钮的选择器,即按钮有效,但突出显示无效。

我在模拟器上对此进行了测试,以便能够进行更精确的敲击。

至于按钮的定位,我以编程方式设置了它的约束,使其实际上位于其父视图之外。父视图有一个附加的手势识别器,我正在玩它试图查看识别器是否干扰按钮,但是当点击按钮时没有调用父视图的 UIGestureRecognizerDelegate 方法。

知道这里可能是什么问题吗?

【问题讨论】:

如何更改按钮的颜色?你有子类UIButton吗? 不,我依赖于默认的 ios 行为。 【参考方案1】:

最后我意识到问题出在我的UIScreenEdgePanGestureRecognizer 上。由于我的按钮位于屏幕左侧,因此按钮的这个小左侧部分被UIScreenEdgePanGestureRecognizer 取消。我通过将以下代码添加到我的UIViewController 解决了这个问题:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

    if ([touch.view isKindOfClass:[UIButton class]])
    
        return NO;
    
    return YES;

【讨论】:

【参考方案2】:

我认为实际设备无法检测到此问题。但是您可以尝试以下代码来突出显示按钮边框 -

[myButton addTarget:self action:@selector(highlightButtonBorder:) forControlEvents:UIControlEventTouchDown];

- (void)highlightButtonBorder:(id)sender

    myButton.layer.borderColor = [[UIColor redColor]CGColor];

别忘了导入下面的框架-

 #import <QuartzCore/QuartzCore.h>

【讨论】:

这段代码不会发生任何可见的事情。正如我已经说过的,按钮有一个背景图像,这可能就是没有边框的原因。顺便说一句,当我在问题中说边框时,我的意思是靠近按钮边缘的一个非常小的区域,而不是图层的实际边框元素。

以上是关于UIButton 未在边框上突出显示的主要内容,如果未能解决你的问题,请参考以下文章

UIbutton 仅在 longPress 上看起来被点击(突出显示)?

在 Storyboard 和 Swift 2 中禁用 UIButton 突出显示

屏幕左侧的 UIButton(在 iOS 7 导航滑动区域中)未突出显示

如何以编程方式突出显示 UIButton?

针对突出显示的背景设置 UIButton 突出显示的标题文本,从而产生暗淡的文本

用户单击时如何禁用 UIButton 的突出显示