2017-12-19 10 views
1

UITextViewの.text値を文字列に変換する際に問題が発生し、インデックスを作成して文字列を "\ n"に吐き出すことができません。私は引用符で文字列を渡すと、それは動作しますが、私はそれが「\ n」はここでUITextViewの値が文字列に変換されない

に分割拒否する.textの値を使用した場合、私の関数である。ここで

func formatLabel(string: String, title_color: UIColor, title_font_size: CGFloat, title_font_weight: UIFont.Weight, subtitle_color: UIColor, subtitle_font_size: CGFloat) -> NSMutableAttributedString { 
    //getting the range to separate the button title strings 
    let index = string.index(of: "\n") ?? string.endIndex 
    let substring1 = String(string[..<index]) 
    let substring2 = String(string[index...]) 

    print("string:", string) 
    print("index: ",index) 
    print("line 1", substring1) 
    print("line 2", substring2) 

} 

が私のViewControllerコードです:

ここで
@IBAction func btnUpdate(_ sender: Any) { 
     txtOutput.attributedText = formatLabel(string: txtInput.text!, title_color: UIColor.gray, title_font_size: 17, title_font_weight: UIFont.Weight.bold, subtitle_color: UIColor.lightGray, subtitle_font_size: 13) 
     txtOutput2.attributedText = formatLabel(string: "Title\nSub Title", title_color: UIColor.gray, title_font_size: 17, title_font_weight: UIFont.Weight.bold, subtitle_color: UIColor.lightGray, subtitle_font_size: 13) 
    } 

がプリント出力されます:だから

string: Title\nSub Title 
index: Index(_compoundOffset: 64, _cache:  
Swift.String.Index._Cache.utf16) 
line 1 Title\nSub Title 
line 2 
string: Title 
Sub Title 
index: Index(_compoundOffset: 20, _cache: Swift.String.Index._Cache.character(1)) 
line 1 Title 
line 2 
Sub Title 

、私はラインが(の: "\ nを")イン​​デックスに分割することができませんUITextViewコントロールを使用していますが、リテラルテキストを使用するときれいです。私が知ることができるのは、Swift 4には、CompoundOffsetを扱うために行わなければならない、何か不思議なことがあります。これは文書化されていないので、問題の解決方法を理解できず、コントロールテキストを文字列として動作させることができません。どんな助けもありがとう。

+1

最初の投稿...申し訳ありません。それを固めた。 – David

+0

あなたの出力から、 'UITextView'にバックスラッシュとそれに続く' n'が含まれているように見えます。これは '\ n" 'と同じではありません。これは改行文字です。 – vacawama

+0

実際には、テキストビューで入力するときに文字\の後に 'n'をタイプしないでください。改行を入力するには、キーボードのEnterキーをタップします。 – rmaddy

答えて

1

UITextViewコンポーネントは、ユーザーが入力した "\ n"をリターン文字に自動的に変換しません。

あなたは使用することができます

txtOutput.attributedText = formatLabel(string: txtInput.text!.replacingOccurrences(of: "\\n", with: "\n"), title_color: UIColor.gray, title_font_size: 17, title_font_weight: UIFont.Weight.bold, subtitle_color: UIColor.lightGray, subtitle_font_size: 13) 

これは、適切なリターン文字と "\ n" を置き換えます。

p.s.ただし、txtInput.textの値を強制的にアンラップするべきではありません。

+0

これは機能しました。私は共通の機能を持っているので、私はそれを私の関数に置き換えて置き換えたので、文字列のソースとそのソースがどのように扱うのかは、より無関係です。 'let string = string.replacingOccurrences(of:" \\ n "、":\ n ")' – David

関連する問題