【问题标题】:UIButton subclass highlighting error (highlight remains or persists even after tap or touch down)UIButton 子类突出显示错误(即使在点击或触摸后突出显示仍然存在)
【发布时间】:2014-02-19 11:17:31
【问题描述】:

我在我的应用程序中对UIButton 进行了子类化,即使我按下按钮,也有很多次高亮颜色保持不变。我无法弄清楚究竟是什么原因造成的,因为它似乎只是偶然发生的,但它似乎发生在大约 50% 的时间里。我很确定这是可重现的。当我在UITableViewCell 中有一个按钮并在表格视图仍在滚动时单击它时,我经常会发生这种情况。

我在子类中覆盖setHighlighted 方法的方式有问题吗?这是我的实现:

@implementation SCPFormButton

- (id)initWithFrame:(CGRect)frame label:(NSString *)label
{
    self = [super initWithFrame:frame];
    if (self) {
        UILabel *buttonLabel = [[UILabel alloc] init];
        buttonLabel.attributedText = [[NSAttributedString alloc] initWithString:[label uppercaseString] attributes:kButtonLabelAttributes];
        [buttonLabel sizeToFit];
        buttonLabel.frame = CGRectMake(kMaxWidth / 2 - buttonLabel.frame.size.width / 2, kStandardComponentHeight / 2 - buttonLabel.frame.size.height / 2, buttonLabel.frame.size.width, buttonLabel.frame.size.height);
        [self addSubview:buttonLabel];

        self.backgroundColor = kFormButtonColorDefault;
    }
    return self;
}

- (void)setHighlighted:(BOOL)highlighted
{
    self.backgroundColor = highlighted ? kFormButtonColorHighlighted : kFormButtonColorDefault;
    [self setNeedsDisplay];
}

@end

【问题讨论】:

    标签: ios iphone objective-c ipad uibutton


    【解决方案1】:

    你错过了对 super 的调用。但是,无论如何,不​​推荐子类化 UIButton,我会尝试使用 setBackgroundImage:forState 来代替。

    【讨论】:

    • 我认为将 UIButton 子类化为任何默认 UIKit 类没有任何问题,您能详细说明一下吗?
    【解决方案2】:

    我会尝试在您的setHighlighted 覆盖中调用super。确实,Apple docs for UIControl 状态:

    如果控件被突出显示,则指定 YES;否则否。默认情况下,控件不突出显示。 UIControl 会在跟踪过程中进入和退出触摸以及进行触摸时自动设置和清除此状态。

    所以,UIControl 中似乎有某种与此相关的状态处理。

    如果这没有帮助,我会尝试添加日志跟踪,以便您可以检查处理触摸时按钮处于哪个状态。

    【讨论】:

    • 为什么,当然。不敢相信我没想到。我把它放在我的代码中,看看这个错误是否仍然出现。
    • 问题似乎消失了,但我必须长按按钮才能突出显示。快速按下不会显示突出显示动画,尽管它会触发动作。还有什么我错过的吗?
    • 你会在setHighlighted里面放一个NSLog,看看是否在短按的情况下被调用?可能您可能需要检测触地(而不是触地)并从那里处理突出显示的状态......
    • 每当我在UITableViewCell 中有一个UIButton 时就会出现关于长按的问题,但当它包含在视图控制器的主视图中时则不会。有什么建议吗?
    • 没关系,在这里找到一个讨论:stackoverflow.com/questions/788085/…
    猜你喜欢
    • 2014-02-03
    • 2014-09-10
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2012-12-14
    • 2012-04-22
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多