UIButton:当isHighlighted = true时,我只能通过滑动手指来调用函数
Posted
技术标签:
【中文标题】UIButton:当isHighlighted = true时,我只能通过滑动手指来调用函数【英文标题】:UIButton: when isHighlighted = true, I can only call a function by swiping my finger 【发布时间】:2017-08-28 01:24:30 【问题描述】:需要你的一些知识:)
我编写了 UIButton 的子类 (CustomWideButton.swift),但没有使用 UIButton 对象。我这样做是因为它对于我需要创建的按钮类型更加灵活。
有一件奇怪的事情,我不知道这是否是正常行为。
var isHighlighted 在点击按钮区域时被调用,这是正常的。所以如果我写这样的东西:
var isHighlighted
didSet
print("I am Highlighted")
animateHighlight()
我会在控制台中看到“我被突出显示”,但它不会调用 animateHighlight(),除非我开始轻轻地在按钮上滑动手指。如果我这样做,那么 animateHighlight() 就可以了。
我在 BitBucket 上发布了一个示例项目,以便您更容易理解我面临的问题: https://bitbucket.org/stephaneDepoilly/stackohighlightedbutton
zip 的直接链接:https://bitbucket.org/stephaneDepoilly/stackohighlightedbutton/get/ee4fc398f475.zip
很抱歉,如果自定义按钮代码看起来有点矫枉过正,那是因为我从我的项目中部分提取了它,而我们正在使用 MVVM。
提前感谢您的帮助!
【问题讨论】:
【参考方案1】:您的调试信息误导了您。我将您的 print
替换为:
NSLog("isHighlighted on \(title) set to \(isHighlighted)")
我在animateHighlight()
中添加了第一行:
NSLog("animateHighlight enter: triggered by isHighlighted on \(title) set to \(isHighlighted)")
我得到了:
2017-08-27 21:57:34.870 StackO_HighlightFunctionCall isHighlighted on [...LOGIN...] set to true
2017-08-27 21:57:34.871 StackO_HighlightFunctionCall animateHighlight enter: triggered by isHighlighted on [...LOGIN...] set to true
2017-08-27 21:57:35.000 StackO_HighlightFunctionCall isHighlighted on [...LOGIN...] set to false
2017-08-27 21:57:35.000 StackO_HighlightFunctionCall animateHighlight enter: triggered by isHighlighted on [...LOGIN...] set to false
所以:
1) animateHighlight
当你告诉它被调用时,它确实被调用了。使用 DebuggerForce!
2) isHighlighted
状态在设置为 true
后非常迅速(0.13 秒)切换回 false。你预料到了吗?
3) animateHighlight
有问题,不会产生任何可见的变化。如果您仔细跟踪您的代码,您会看到 setupUI()
在更新标签文本后立即被调用。这是因为您从layoutSubviews()
调用setupUI()
。 layoutSubviews
在运行时一直被调用,当有关视图的任何更改可能影响子视图时。 setupUI
应该被调用只有当视图被添加到它的父视图时,例如在viewDidLoad()
滑动有效的原因是layoutSubviews()
会延迟直到您完成滑动,因为触发点击动作的是.touchUpInside
事件,但isHighlighted
由隐藏的@987654339 触发@.touchDownInside
处理!
【讨论】:
非常感谢 BaseZen 的分析!我删除了 animateHighlight() 的 else 条件,因为它会在 isHighlight = false 时恢复到原来的状态。我现在更好地理解了这张照片。我的问题已经解决了。以上是关于UIButton:当isHighlighted = true时,我只能通过滑动手指来调用函数的主要内容,如果未能解决你的问题,请参考以下文章
为 UIButton isHighlighted 属性设置 Observable
当用户与 UIButton 交互时,是不是可以让我在自定义 UIButton 的 drawRect 中绘制的内容“变暗”?