2017-07-06 101 views
1

我有很長的字符串是這樣的: 「問:它是哪一天?\ nA:bla bla \ nQ:幾點了?\ nA:bla bla \ nQ:它是哪一天?\ nA:bla bla \ nA:bla bla \ n「Swift 3歸因文本解決方案

我的問題是我需要在textView中顯示此文本,但問題必須是橙色,答案必須是灰色的顏色。我從服務器獲取字符串,不知道我會得到什麼,但是這樣的格式。如何解決這個問題?

+0

最困難的部分是要知道問題的確切定界符Answsers:'問:答:''之前\ N'和下一個?其餘的,一旦你知道範圍,它就很直接。 – Larme

+0

您能提供分隔符嗎?而且,你確定你總是可以獲得這種格式嗎? –

回答

0

如果字符串甲就像"Q: what day is it?\nA: bla bla\nQ: what time is it?\nA: bla bla\nQ: what day is it?\nA: bla bla\nQ: what time is it?\nA: bla bla\n"總是那麼你可以試試下面的代碼:

var str = "Q: what day is it?\nA: bla bla\nQ: what time is it?\nA: bla bla\nQ: what day is it?\nA: bla bla\nQ: what time is it?\nA: bla bla\n" 
let textView = UITextView(frame: CGRect(x: 20.0, y: 90.0, width: 250.0, height: 200.0)) 

    textView.backgroundColor = UIColor.white 

    //separate it with \n 
    let QuestionsAndAnswersArray = str.components(separatedBy: ["\n"]) 

    var finalStringArr = NSMutableAttributedString() 

    for item in QuestionsAndAnswersArray { 

     if item.characters.count > 0 { 

      let firstChar = item[item.startIndex] 

      //For Questions 
      if firstChar == "Q" { 

       //For new line after every character 
       let QuestionStr = item + "\n" 

       var myMutableString = NSMutableAttributedString() 
       myMutableString = NSMutableAttributedString(string: QuestionStr) 
       myMutableString.setAttributes([NSForegroundColorAttributeName : UIColor.red], range: NSRange(location:0,length:item.characters.count)) 
       finalStringArr.append(myMutableString) 

      } else if firstChar == "A" { //For Answers 

       let answerStr = item + "\n" 

       //For new line after every character 
       var myMutableString = NSMutableAttributedString() 
       myMutableString = NSMutableAttributedString(string: answerStr) 
       myMutableString.setAttributes([NSForegroundColorAttributeName : UIColor.gray], range: NSRange(location:0,length:item.characters.count)) 
       finalStringArr.append(myMutableString) 
      } 
     } 
    } 

    textView.attributedText = finalStringArr 

而結果將是:

enter image description here

希望這會有所幫助。

0

問題是第一個問題後沒有「\ n」。 我按了一下解決了這個另一種方式:

let faqStr = "Q: what day is it?A: bla bla\nQ: what time is it?\nA: bla bla\nQ: what day is it?\nA: bla bla\nQ: what time is it?\nA: bla bla\n" 
    var faqStrArray = faqStr.components(separatedBy: "Q:") //separate by Q+A 

    faqStrArray.remove(at: 0) // [0]="" 

    let attrText = NSMutableAttributedString() 
    for i in 0..<faqStrArray.count { 
     faqStrArray[i] = "Q:\(faqStrArray[i])" // append "Q:" that was taken by separator 

     var array = faqStrArray[i].components(separatedBy: "A:") // separate to Question and Answer 
     array[1] = "A:\(array[1])\n" // append "A:" that was taken by separator 

     let attrStringOrange: NSMutableAttributedString = NSMutableAttributedString(string: array[0]) // orange string 
     attrStringOrange.addAttribute(NSForegroundColorAttributeName, value: UIColor.orange, range: NSMakeRange(0, attrStringOrange.length)) // adding attribute 
     let attrStringGrey: NSMutableAttributedString = NSMutableAttributedString(string: array[1]) // grey string 
     attrStringGrey.addAttribute(NSForegroundColorAttributeName, value: UIColor.gray, range: NSMakeRange(0, attrStringGrey.length)) // adding attribute 

     attrStringOrange.append(attrStringGrey) // appending answer to question 

     attrText.append(attrStringOrange) 
    } 

    txtView.attributedText = attrText