我希望用户能够点按电话号码并直接拨打电话。我为每个人(私人,移动和工作)和3个不同的标签有3个不同的数字。 现在,如果我点击第一个或第二个标签没有任何反应,当我点击第三个标签(工作)时,它会调用第一个标签(私人)的动作。
所以我的第一个问题:我错误地认为它没有识别我点击的发件人?
第二个问题:我必须在函数didTapPhoneNumber中写一下if语句吗?
phoneNumberPrivate2.isUserInteractionEnabled = true
phoneNumberMobile2.isUserInteractionEnabled = true
phoneNumberWork2.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(self.didTapPhoneNumber(_:)))
tap.numberOfTapsRequired = 1
tap.numberOfTouchesRequired = 1
phoneNumberPrivate2.addGestureRecognizer(tap)
phoneNumberMobile2.addGestureRecognizer(tap)
phoneNumberWork2.addGestureRecognizer(tap)
}
//call me maybe
@objc func didTapPhoneNumber(_ sender: UITapGestureRecognizer) {
print("success")
let privateCall = phoneNumberPrivate2.text?.replacingOccurrences(of: " ", with: "", options: .literal, range: nil)
let mobileCall = phoneNumberMobile2.text?.replacingOccurrences(of: " ", with: "", options: .literal, range: nil)
let workCall = phoneNumberWork2.text?.replacingOccurrences(of: " ", with: "", options: .literal, range: nil)
if sender == phoneNumberPrivate2 {
print("you tapped label \(self.phoneNumberPrivate2)")
if let url = URL(string: "tel://\(String(describing: privateCall))") {
UIApplication.shared.openURL(url)
}
} else if sender == phoneNumberMobile2 {
print("you tapped label \(self.phoneNumberMobile2)")
if let url = URL(string: "tel://\(String(describing: mobileCall))") {
UIApplication.shared.openURL(url)
}
} else if sender == phoneNumberWork2 {
print("you tapped label \(self.phoneNumberWork2)")
if let url = URL(string: "tel://\(String(describing: workCall))") {
UIApplication.shared.openURL(url)
}
} else {
print("action failed")
}
}
答案 0 :(得分:2)
首先,无法将手势识别器分配给多个视图。如果您尝试这样做,它将仅适用于您添加到的最后一个视图。您需要为每个标签创建一个独特的点按手势。他们每个人都可以使用相同的选择器。
接下来,您尝试将sender
(手势)与每个标签进行比较。那不行。您需要将sender.view
与每个标签进行比较。
最后,在每个相关的privateCall
语句中移动mobileCall
,workCall
和if
。当只有一个与给定的水龙头相关时,无需计算所有三个。
真的最后,请勿使用String(describing:)
来构建网址。根据需要正确展开可选值。