【问题标题】:Keep UIButton highlighted after touch & iOS 7在触摸和 iOS 7 后保持 UIButton 突出显示
【发布时间】:2013-10-06 21:21:24
【问题描述】:

我需要在触摸事件后突出显示UIButton。在 iOS 版本

- (IBAction)clickMe:(id)sender {
    UIButton *button = sender;
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ button.highlighted = YES; }];
}

不幸的是,iOS 7 中发生了一些变化,这段代码不再起作用:如果我点击按钮,按钮会恢复到正常状态;有趣的是,如果我按住按钮稍长一点,按钮仍然突出显示。请注意,该应用程序是为 iOS 6 开发的,因此它以兼容模式在 iOS 7 中运行。我试图找出一种方法让应用程序在 iOS 6 和 7 上都能正常工作,但到目前为止我还没有找到一个好的解决方案(一种解决方法是排队一个事件,在短暂延迟后突出显示按钮,但是产生令人讨厌的按钮闪烁)。有什么建议吗?

【问题讨论】:

    标签: objective-c uibutton ios7 compatibility


    【解决方案1】:

    As for the ".highlighted" property you're using, Apple documentation states: "UIControl 自动设置和清除此状态时,在跟踪过程中触摸进入和退出以及有触摸时自动清除。"

    为什么不根据你希望它出现的“状态”来改变你的 UIButton 显示的 UIImage 呢?我会将 UIButton 子类化,给它一个可以控制或设置的状态属性,并根据该状态显示不同的图像。

    【讨论】:

    • 你是对的@Wolfy。让我想一个稍微改写的答案。
    • Michael,是的,我知道 .highlighted 属性是如何工作的,但感谢您指出这一点。像我这样排队操作会覆盖默认行为,因为该操作将在 Touch Up 事件将.highlighted 重置为 NO 之后发生。这是一个技巧,但它简单而有效。不幸的是,iOS 7 显然改变了操作顺序。当然,继承 UIButton 类可以解决问题,但我正在寻找一个简单的解决方案。另外,我没有使用图像,只是标题文本。
    【解决方案2】:

    试试这个:

    [UIView animateWithDuration:1
                         animations:^{
                         }
                         completion:^(BOOL finished) {
                             button.highlighted = true;
                             button.selected = true;
                         }
    ];
    

    【讨论】:

      【解决方案3】:

      这可能有点晚了,但我最终解决这个问题的方法是在块中将图层背景颜色设置为灰色,以设置按钮突出显示。然后当我将高亮状态设置为 false 时,我将背景颜色设置回白色。为此,您必须使用自定义按钮,而不是圆角矩形按钮。

      【讨论】:

        猜你喜欢
        • 2014-09-10
        • 2015-08-28
        • 2014-02-03
        • 2013-11-16
        • 2014-09-05
        • 2012-12-14
        • 2014-02-19
        • 1970-01-01
        • 2012-01-03
        相关资源
        最近更新 更多