UITableViewController 自定义单元格中缺少 UIButton 默认点击淡入淡出动画

Posted

技术标签:

【中文标题】UITableViewController 自定义单元格中缺少 UIButton 默认点击淡入淡出动画【英文标题】:UIButton default tap fade animation missing in UITableViewController custom cell 【发布时间】:2013-12-10 08:25:59 【问题描述】:

我有一个自定义单元格,里面有几个 UIButton。我在按钮上创建了类似的目标操作:

[cell.customLocationButton addTarget:self action:@selector(customLocationButtonTap:) forControlEvents:UIControlEventTouchUpInside];

虽然我没有在 UIButtons 上看到默认的 ios 淡入淡出动画,但这些动作效果很好?我还需要启用什么来获得这些 - 我认为在使用 IB 的 UIButton 时它们是标准的?

【问题讨论】:

显示您的 customLocationButton 初始化部分 我没有初始化。我认为您在使用 IB 时不需要初始化? 只需为您的 customLocationButton 使用 UIButtonTypeSystem 类型。希望 customLocationButton 为自定义类型。 按钮类型是只读属性。在 IB 中它已经设置为 System 【参考方案1】:

遇到了同样的问题。我可以使用setTitleColor:forState: 让按钮在突出显示时更改颜色,但它并没有像其他系统按钮那样从突出显示淡化为正常状态。

原来那是因为我的按钮是UIButtonTypeCustom 类型的。将其切换到UIButtonTypeSystem 为我解决了这个问题。请注意,我在 iOS9 上运行它。

这是一个假定 selfUIView 或子类的 sn-p (Swift):

let button = UIButton(type: .System)
button.setTitle("Title", forState: .Normal)
button.sizeToFit() // Sizes the button frame based on the title.
addSubview(button)

【讨论】:

【参考方案2】:

我一直在互联网上搜索,最后我从 *** 上的帖子中找到了解决方案,请查看 here。

对于 Swift 4,你可以添加这个 UIButton 扩展,它会正常工作。

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)
    


【讨论】:

那是天才,重写 isHighlighted 比在触摸方法上做动画要快得多!【参考方案3】:

我找到了这个解决方案:

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

这真的很简单,而且效果很好。

【讨论】:

【参考方案4】:

在您的 XIB 内部属性检查器中选择您的按钮,然后在按钮类型内部您将获得跟随选项,您可以相应地选择和更改您的按钮外观:-

【讨论】:

是的在系统中你需要设置但是如果你想要一些其他的动画那么你需要使用 CABasicAnimation 如果我拖出一个按钮并将其直接放在 VC 的默认视图中,我会得到一个基本的淡入淡出动画。这没有设置任何自定义动画。当我在自定义单元格中使用按钮时,是否需要手动添加 CABasicAnimation 图层?【参考方案5】:

你可以做的另一件事是:

斯威夫特:

button.showsTouchWhenHighlighted = true
button.setTitleColor(UIColor.blueColor(), forState: .Normal)
button.setTitleColor(UIColor.lightGrayColor(), forState: .Selected)

【讨论】:

【参考方案6】:

您可能像这样初始化按钮:

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

尝试这样做:

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

点击时的“淡入淡出”动画,自带系统风格,初始化按钮后可以自定义。

【讨论】:

以上是关于UITableViewController 自定义单元格中缺少 UIButton 默认点击淡入淡出动画的主要内容,如果未能解决你的问题,请参考以下文章

当我从 UITableViewController 打开自定义 UIView 时,如何关闭自定义视图并返回表格视图?

如何从 UiTableViewController 访问自定义 UITableViewCell 的属性?

实现自定义 UITableViewController 类并避免委托警告

容器视图中的自定义 UITableViewController

具有自定义数据源的 UITableViewController 不显示单元格

如何以编程方式设置 UITableViewController 自定义类?