Как сделать так, чтобы соприкасающийся NSAttributedString переместился в другой ViewController Swift - PullRequest
0 голосов
/ 18 февраля 2019

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

. Это не повторяющийся вопрос, потому что мой вопрос о том, как перейти к просмотру контроллера и дублированию вопроса, как открыть ссылку при нажатии Какя могу сделать кликабельную ссылку в NSAttributedString? .

Снимок экрана

Screen Shot

На изображении выше показано три NSAttributedString, первый из которых dhiman.sham1gmail.com, а второй * has started followingи третий Sham.При попытке нажать на Sham никакие действия не выполняются.я хочу переместить этот контроллер на другой контроллер, когда нажимаю Sham.

Это мой код:

@IBOutlet weak var descriptionLbl: UILabel!

override func updateWithModel(_ model: AnyObject) {
 self.descriptionLbl.attributedText = self.followingGetTextFromType(data: (model as? FollowingNotificationData)!)
}

func followingGetTextFromType(data:FollowingNotificationData) -> NSMutableAttributedString{
  var attributedString = NSMutableAttributedString()
  attributedString = NSMutableAttributedString(string:(data.detailsNoti?.fullName)!, attributes: strres)
  let startedfollowing = NSMutableAttributedString(string:" has started following ", attributes: attrs)
  attributedString.append(startedfollowing)
  var discription = NSMutableAttributedString()
  if data.fullName == ""{
  discription = NSMutableAttributedString(string:"\((data.userName)!)", attributes: strres)
  }else{
  discription = NSMutableAttributedString(string:"\((data.fullName)!)", attributes: strres)
  }
  attributedString.append(discription)
}

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

Любая помощь будет принята с благодарностью.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Попробуйте этот код, чтобы сделать NSMutableAttributedString. Вы можете сделать его динамическим как ваше требование передавать динамическое строковое значение в качестве параметра.

Положите UItextView вместо UIlabel

@IBOutlet weak var descriptionLbl: UITextView!

descriptionLbl.attributedText = prepareAttributedTextString()

func prepareAttributedTextString() -> NSMutableAttributedString {

        let masterString = "dhiman@gmail.com has started following Sham"

        let formattedString = NSMutableAttributedString(string: masterString)

        let ShamUseAttribute = [
            NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleSingle.rawValue,
            NSAttributedStringKey.font: UIFont.systemFont(ofSize: 16.0),
            NSAttributedStringKey.link: URL(string: "Sham")!,
            ] as [NSAttributedStringKey : Any]


        let ShamRange = (masterString as NSString).range(of: "Sham")
        formattedString.addAttributes(ShamUseAttribute, range: ShamRange)

        return formattedString
    }

Используйте это UITextViewDelegate для обнаружения касания UItextView и прогнозирования до указанного UIviewController

// MARK: UITextView Delegate Method
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {

       if (URL.absoluteString == "Sham") { 
             let objVC = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "YourViewController") as! YourViewController           
             self.navigationController?.pushViewController(objVC, animated: true)
        }
        return true
    }

Установить следующее свойство из раскадровки.

enter image description here

0 голосов
/ 18 февраля 2019

У вас есть два варианта, чтобы все работало в соответствии с вашими требованиями: либо пользователь ниже UILabel библиотеки, либо измените свой элемент управления на UITextView.

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

  1. UILabel

    [TTTAttributedLabel]

...