UIButton default tap fade animation missing in UITableViewController custom cell

后端 未结 6 931
后悔当初
后悔当初 2021-02-08 08:41

I have a custom cell with a few UIButtons in it. I have created Target Actions like so on the buttons:

[cell.customLocationButton addTarget:self action:@selector         


        
相关标签:
6条回答
  • 2021-02-08 09:01

    I found this solution:

    setTitleColor(UIColor.init(white: 1, alpha: 0.3), for: .highlighted)
    

    It's really simple and works perfectly.

    0 讨论(0)
  • 2021-02-08 09:06

    Had the same problem. I could get the button to change color on highlight with setTitleColor:forState:, but it didn't fade from highlight to normal state like the other system buttons.

    Turns out that's because my button was of type UIButtonTypeCustom. Switching it to UIButtonTypeSystem solved it for me. Please note I'm running this on iOS9.

    Here's a snippet (Swift) that assumes self is a UIView or subclass:

    let button = UIButton(type: .System)
    button.setTitle("Title", forState: .Normal)
    button.sizeToFit() // Sizes the button frame based on the title.
    addSubview(button)
    
    0 讨论(0)
  • 2021-02-08 09:06

    In your XIB inside attribute inspector select your button and then inside button type you will get follow option you can select and change your button look and feel accordingly:-

    enter image description here

    0 讨论(0)
  • 2021-02-08 09:10

    I've been searching all over the internet and finally I've found a solution from a post on StackOverFlow check it out here.

    For Swift 4 You can add this UIButton extension and it will work fine.

    extension UIButton {
    
        override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            isHighlighted = true
            super.touchesBegan(touches, with: event)
        }
    
        override open func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            isHighlighted = false
            super.touchesEnded(touches, with: event)
        }
    
        override open func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
            isHighlighted = false
            super.touchesCancelled(touches, with: event)
        }
    
    }
    
    0 讨论(0)
  • 2021-02-08 09:12

    you probably initialized the button like this:

    let button = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: <width>, height: <height>)
    

    try to do it like this:

    let button = UIButton.init(type: .system)
    button.frame = CGRect.init(x: 0, y: 0, width: <width>, height: <height>)
    

    The "fade" animation on tap, comes with system style, after init the button you can customize it.

    0 讨论(0)
  • 2021-02-08 09:24

    Another thing you can do is:

    Swift:

    button.showsTouchWhenHighlighted = true
    button.setTitleColor(UIColor.blueColor(), forState: .Normal)
    button.setTitleColor(UIColor.lightGrayColor(), forState: .Selected)
    
    0 讨论(0)
提交回复
热议问题