Быстрое пользовательское действие IOS в обнаружении номера - PullRequest
0 голосов
/ 25 октября 2018

В нашем приложении у нас есть исходящий номеронабиратель VOIP-телефона.

Я хотел бы обнаружить числа в строке и добавить настраиваемое действие, чтобы вместо поведения по умолчанию при открытии родной номеронабирателя оноперейдите к нашей собственной программе набора номера в приложении и предварительно заполните выбранное число.

Моими первыми мыслями было получить тело сообщения в виде цепочки слов и проверить каждое слово, чтобы увидеть, является ли оно числом.а затем создать атрибутивную строку.Но я изо всех сил пытаюсь понять, как я могу вернуть атрибутированную строку обратно в строку и что я бы даже указал, чтобы открыть указанный экран с предварительно заполненным числом.

Мне известен NSDataDetector, который может перечислять числа, найденные в строке, но я застрял в том, как заменить эти конкретные детали активируемым щелчком мыши и вернуть его обратно в виде строки.

Есликто-нибудь имел подобный опыт с этим, то любая помощь будет высоко ценится?

ПРИМЕЧАНИЕ : текст этого сообщения отображается в элементе управления UILabel.

Обновление

это то, что у меня было до сих пор ...

    func AddNumberLink() -> String {    
    let body = self     
    let wordsInBody = body.components(separatedBy: .whitespaces)

    for i in 0..<wordsInBody.count {            
        var word = wordsInBody[i]           
        if word.isTelephoneNumeric {            
        let attributedString = NSMutableAttributedString(string:word)
    attributedString.addAttribute(NSAttributedStringKey.link, value:"https://www.google.com",range: NSRange(location: 0, length: word.count))



  attributedString.addAttribute(NSAttributedStringKey.foregroundColor,value: UIColor.red, range: NSRange(location:0, length: word.count))
        word = attributedString.string
        }       
    }
return body
}

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Спасибо всем за ваши предложения, которые заставили меня подойти к проблеме иначе, чем мой код выше.

Как и @Lutz и @Larme, предложенные выше, переопределив поведение по умолчанию при касании UITextViewЯ могу собрать число с помощью UITextViewDelegate.

Итак, полное решение:

  1. Добавить атрибут детектора чисел в UITextView
  2. Реализовать UITextViewDelegate func textView (_ textView:UITextView, shouldInteractWith URL: URL, в CharacterRange: NSRange, взаимодействие: UITextItemInteraction) -> Bool
  3. Добавить пользовательскую логику для соответствующей обработки касания.
0 голосов
/ 25 октября 2018

NSDataDetector дает вам диапазоны чисел.Теперь создайте (непостоянную) атрибутивную строку и для каждого диапазона добавьте ссылку на соответствующий номер URL (NSAttributedString.Key.link: urlString).Затем отобразите текст в UITextView и добавьте делегата.В делегате внедрите func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool. В этой функции вы можете решить, какое действие подходит.

...