2017-08-28 35 views
0

需要你的一些伟大的知识:)调用一个函数的UIButton:当isHighlighted = true时,我只能通过刷我的手指

我写的UIButton(CustomWideButton.swift)的子类,而使用的UIButton对象。我这样做是因为它对于我需要创建的按钮类型更加灵活。

有一个奇怪的事情,我不知道这是否是一个正常的行为。

var isHighlighted在点击正常的按钮区域时被调用。所以,如果我写的是这样的:

var isHighlighted { 
    didSet { 
     print("I am Highlighted") 
     animateHighlight() 
    } 
} 

我会在控制台“我突出了”看,但它不会调用animateHighlight()除非我有点开始刷卡我的手指上的按钮。如果我这样做,那么animateHighlight()的作品。

我张贴到位桶的样本项目,所以它会更容易让你了解我面临的问题: https://bitbucket.org/stephaneDepoilly/stackohighlightedbutton

直接链接,邮编:https://bitbucket.org/stephaneDepoilly/stackohighlightedbutton/get/ee4fc398f475.zip

我很抱歉,如果自定义按钮代码看起来有点过分,这是因为我从我的项目中部分提取了它,并且使用了MVVM。

在此先感谢您的帮助!

回答

2

您的调试信息会误导您。我换成你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秒)回到假。你有期待吗?

3)animateHighlight是越野车,并没有产生任何明显的变化。如果仔细追踪代码,则在更新标签的文本后,您会看到setupUI()被调用。这是因为您从layoutSubviews()呼叫setupUI()layoutSubviews在运行时一直被称为当任何关于视图的变化可能会影响子视图setupUI只有当视图被添加到其超级视图时才应该被称为,例如,在viewDidLoad()

究其原因,刷卡工作原理是,layoutSubviews()延迟直到完成刷卡,因为它是.touchUpInside事件触发龙头作用,但isHighlighted被隐藏UIButton.touchDownInside处理触发!

+0

非常感谢您的分析BaseZen! 我删除了animateHighlight()的else条件,因为当* isHighlight = false *时,无论如何都会回到它的原始状态。 我现在更好地了解图片。我的问题已修复。 – Carmelo

相关问题