Позвоните по номеру телефона от UILabel с UITapGestureRecognizer Swift - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу, чтобы пользователь мог нажать на номер телефона и позвонить ему напрямую. У меня есть 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")
    }
}

1 Ответ

0 голосов
/ 28 апреля 2018

Во-первых, распознаватель жестов не может быть назначен более чем одному представлению. Если вы попытаетесь это сделать, он будет работать только при последнем добавлении. Вам необходимо создать уникальный жест касания для каждой метки. Каждый из них может использовать один и тот же селектор.

Далее вы пытаетесь сравнить sender (который является жестом) с каждой из меток. Это не сработает. Вам нужно сравнить sender.view с каждым из ярлыков.

Последнее, перемещайте privateCall, mobileCall и workCall в каждом соответствующем if утверждении. Нет необходимости вычислять все три, когда для данного крана важен только один.

Действительно последний, не используйте String(describing:) для создания URL. Правильно разверните необязательные значения при необходимости.

...