【问题标题】:How to stop UIButton from highlighting/flash each time its title is reset?每次重置标题时如何阻止 UIButton 突出显示/闪烁?
【发布时间】:2015-10-29 01:14:27
【问题描述】:

我使用 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 我刚刚在设备上试用过,按钮也闪烁。

标签: ios swift cocoa-touch uibutton


【解决方案1】:

我可能弄错了,但是闪烁看起来可能是由于数据传输延迟引起的;您正在尝试在新标题仍在检索时更改标题,因此闪烁。

我愿意:

  1. 检索数据并将其存储在临时但专门创建的字符串中。
  2. 完成数据传递后,调用方法将按钮的文本更改为存储的字符串的文本。

【讨论】:

  • @Xchord 的回答奏效了。但仍然非常感谢你!您对数据传输延迟的想法很有启发性,我将来可能会遇到类似的问题,最好记住这个解决方案。 :)
【解决方案2】:

尝试将按钮类型设置为自定义,而不是系统。

【讨论】:

  • 非常感谢它有效!但我可以问为什么吗?系统 UIButton 是默认设置为这种突出显示行为还是其他?
  • 是的,这是系统按钮的默认行为。
【解决方案3】:

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

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

【讨论】:

  • 我刚试了下,问题依旧。不过还是谢谢大家。
猜你喜欢
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2011-09-14
  • 2021-11-29
相关资源
最近更新 更多