如何防止UIButton在重置标题时闪烁或高亮?

3
我正在使用一个UIButton作为标签来显示一些数字。每当函数被调用以重置此按钮的标题时,它都会闪烁。这不会影响功能,但会损害用户体验。我想知道是否有办法停止UIButton这种突出行为?
提前感谢!
编辑:以下是我简单调用委托方法updateDigits以刷新按钮标题的代码。
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate, DigitsEntryViewDelegate {

    @IBOutlet weak var tipField1: UIButton!
    @IBOutlet weak var tipField2: UIButton!

    var buttonsArray = [UIButton]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.tipField1.tag = 0
        self.tipField2.tag = 1

        self.tipField1.addTarget(self, action: "inputFieldClicked:", forControlEvents: UIControlEvents.TouchUpInside)
        self.tipField2.addTarget(self, action: "inputFieldClicked:", forControlEvents: UIControlEvents.TouchUpInside)

        self.buttonsArray.append(self.tipField1)
        self.buttonsArray.append(self.tipField2)
    }


    func inputFieldClicked(sender: UIButton) {
        let anchor: UIView = sender

        let viewControllerForPopover = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DigitEnter") as! DigitsEntryViewController

        // set popover API values
        viewControllerForPopover.currentDigitsString = sender.currentTitle
        viewControllerForPopover.tagNumber = sender.tag

        viewControllerForPopover.delegate = self
        viewControllerForPopover.preferredContentSize = CGSizeMake(240, 320)
        let popover = UIPopoverController(contentViewController:viewControllerForPopover)
        popover.presentPopoverFromRect(anchor.frame, inView: anchor.superview!, permittedArrowDirections: UIPopoverArrowDirection.Down, animated: false)
    }

    func updateDigits(returnedDigits: String, tagNumber: Int) {
        self.buttonsArray[tagNumber].setTitle(returnedDigits, forState: UIControlState.Normal)
    }
}

这只在模拟器上发生还是在设备上也有呢?我会分享你的代码:请告诉我你调用按钮进行更改的位置。 - App Dev Guy
1
你应该在这里分享你的代码。按钮闪烁不是正常行为,因此你的代码中可能有某些重新初始化按钮的操作。 - JaredH
@App Dev Guy,我刚刚在设备上尝试了一下,按钮也会闪烁。 - Gordon Vanderbilt
3个回答

14
尝试将按钮类型设置为“Custom”,而不是“System”。

非常感谢,它起作用了!但我可以问一下为什么吗?系统的 UIButton 是默认设置为这种高亮行为,还是其他原因? - Gordon Vanderbilt
1
是的,这是系统按钮的默认行为。 - Xchord
我的问题略微不同:在打开菜单时,UIView中的3个堆叠按钮中的最后一个选择的按钮会闪烁。这也解决了我的问题。谢谢XChord。 - Farhan A. Rafi

1
我可能错了,但是闪烁看起来像是由于数据传递延迟引起的;您正在尝试在新标题仍在检索时更改标题,因此出现闪烁。
我的建议是:
  1. 检索数据并将其存储在临时字符串中。
  2. 在数据传递完成后,调用方法将按钮文本更改为存储的字符串。

1
@Xchord的答案很有效。但是还是非常感谢你!你对数据传输延迟的思考很有启发性,我将来可能会遇到类似的问题,最好记住这个解决方案。:) - Gordon Vanderbilt

0

这应该可以解决你的问题:

[UIView performWithoutAnimation:^{  [self.myButton setTitle:text forState:UIControlStateNormal];
  [self.myButton layoutIfNeeded];
}];

我刚刚尝试了,但问题仍然存在。不过还是谢谢你们。 - Gordon Vanderbilt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接