Ios ASAuthorizationAppleIDButton未响应touchUpInside事件
我在最新的Xcode 11.0中遇到了奇怪的bug 我的代码:Ios ASAuthorizationAppleIDButton未响应touchUpInside事件,ios,swift,apple-sign-in,Ios,Swift,Apple Sign In,我在最新的Xcode 11.0中遇到了奇怪的bug 我的代码: 选择器从未调用,但若我将事件更改为触地,则一切正常 我也遇到过同样的问题。在我的例子中,视图控制器的主视图已附加了UITapGestureRecognizer。将手势识别器的属性cancelsTouchesInView设置为false有帮助。我认为这是苹果的错误。使用触地而不是触地内。我发现ASAuthorizationAppleIDButton根本没有收到任何点击手势(down或upInside) 在我的例子中,我在一个父视图中遗
选择器从未调用,但若我将事件更改为触地,则一切正常 我也遇到过同样的问题。在我的例子中,视图控制器的主视图已附加了
UITapGestureRecognizer
。将手势识别器的属性cancelsTouchesInView
设置为false有帮助。我认为这是苹果的错误。使用触地而不是触地内。我发现ASAuthorizationAppleIDButton
根本没有收到任何点击手势(down
或upInside
)
在我的例子中,我在一个父视图中遗漏了一个约束,这导致
ASAuthorizationAppleIDButton
在父视图的框架之外
这是在一个故事板上,所以有一个红色箭头和警告,但一开始我没有注意到。我通过调试视图层次结构并记录每个祖先视图在树上的位置找到了这一点
修复方法是确保存在约束,以将
ASAuthorizationAppleIDButton
保持在其祖先的框架内。Edit 2020-06-16:
这个问题最近被苹果公司解决了。AuthorizationAppleIDButtonButton按钮现在可以触发UIControl.Event.touchUpInside
尽管与UIButton不同,它不绑定UIControl.Event.primaryActionTriggered
和.touchUpInside
原始答复:
如果将中的primaryAction
替换为touchUpInside
,它也不起作用,因此我猜按钮本身有问题
除此之外,我没有找到其他解决方案。该动作将在primaryActionTriggered
上触发,登录按钮将显示正常情况下的高亮动画
@可用(iOS 13.0,*)
使用AppleButton进行类签名:UIButton{
私有var操作:(()->无效)?
private let AuthorizationAppleIDButton按钮=ASAuthorizationAppleIDButton()
覆盖变量isHighlighted:Bool{
迪塞特{
super.ishighleed=ishighleed
授权AppleidButtonButton.isHighlighted=isHighlighted
}
}
类func make(操作:@escaping(()->Void))->SignInWithAppleButton{
let button=SignInWithAppleButton(类型:。自定义)
按钮。设置()
按钮。动作=动作
返回按钮
}
专用函数设置(){
addSubviewToFill(授权AppleIDButton按钮)
addTarget(self,action:#选择器(triggerAction),for:.PrimaryActionTrigger)
authorizationAppleIDButtonButton.isUserInteractionEnabled=false
}
@objc私有函数触发操作(){
行动?()
}
}
我发现最好的方法就是使用UITapGestureRecognizer
let button = ASAuthorizationAppleIDButton()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleAuthorizationAppleIDButtonPress))
button.addGestureRecognizer(tapGesture)
将addTarget(u∶action:for:)与.toucdown一起使用需要用户长按按钮(比正常情况长约1秒),然后才能检测到异常的操作
苹果甚至拒绝了我提交的应用程序,因为“用苹果按钮点击登录不会产生任何动作”
我建议只使用点击手势识别器来避免任何问题。我对授权AppleIDButton的问题是没有在项目目标中添加“使用Apple登录”功能。
添加ASAuthorizationControllerDelegate
时,需要检查日志:
@available(iOS 13.0, *)
extension SignInViewController: ASAuthorizationControllerDelegate {
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Error: \(error.localizedDescription)")
}
}您解决过这个问题吗?我也遇到了同样的问题。Xcode 11.2中仍然存在同样的问题,有人解决了吗?ASAuthorizationAppleIDButton
是一个UIControl
;它的行为与实际的ui按钮
不同。谢谢你的解决方案。应该是公认的解决方案。。。在苹果解决这个愚蠢的问题之前不,这不是苹果方面的问题,而是你方面的问题,因为你可能在你的视图上使用点击手势。这是我的问题。我想很多人在他们的登录屏幕上有一个点击手势识别器,也会遇到这个问题。似乎这一个是问题的正确原因,但在我的情况下,取消触摸视图没有帮助。当键盘升起时,我手动添加了轻敲手势,当键盘关闭时,我删除了轻敲手势。谢谢,伙计,我弄明白了这一点,真是疯了!
@available(iOS 13.0, *)
extension SignInViewController: ASAuthorizationControllerDelegate {
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Error: \(error.localizedDescription)")
}