2017-10-14 4 views
0

私はストーリーボードにUITextViewを持っています(テキスト属性は属性で、属性の編集を許可します。ユーザーがボタンを押すと、太字のフォントを「アクティブにする」ことができます。だから、ユーザーのタイプは太字でなければなりません。また、リターンキーを押すと、次の行に移動したいので、UITextViewはすべてのテキストの属性を覚えておく必要があります。問題は、リターンキーを押すと、すべての文字が太字に変わります。キーボードのリターンキーが押されたときにUITextViewがフォントスタイルを記憶していません

これは私がコードで持っているものです。

var isBoldTyping: Bool = false 

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    print("text: \(text)", range) 
    if text == "\n" { 
     textView.text.append("\n") 


     if isBoldTyping { 
      //textView.typingAttributes = [NSAttributedStringKey.font.rawValue: regularText] 
      isBoldTyping = false 
     } 

    } 

    if isBoldTyping { 
     textView.textStorage.beginEditing() 
     textView.textStorage.addAttributes([NSAttributedStringKey.font: boldText], range: range) 
     print("Atttributed adding") 
     textView.textStorage.endEditing() 
    } else { 
     textView.textStorage.beginEditing() 
     textView.textStorage.addAttributes([NSAttributedStringKey.font: regularText], range: range) 
     print("Atttributed adding") 
     textView.textStorage.endEditing() 
    } 

    return true 
} 

私が達成しようとしている別の例は、スタックオーバーフローの編集効果です。 "{}"アイコンを押すと、私は "コード化可能なモード"になります。キーボードを押すと正常に戻ります。

regularTextとboldTextプロパティを使用すると、私ははっきりとあなたが達成しようとしているものを理解している場合、typingAttributesである必要があることだけをサイズ14

答えて

0

とちょうどシステムフォントです。 \nreplacementTexttypingAttributesに表示されている場合は、太字を無効にする必要があります。私はあなたのための小さな例を書く

class ViewController: UIViewController, UITextViewDelegate { 

    let textView = UITextView() 
    let boldButton = UIButton(type: .system) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     textView.translatesAutoresizingMaskIntoConstraints = false 
     textView.delegate = self 
     textView.typingAttributes = [NSAttributedStringKey.font.rawValue: UIFont.systemFont(ofSize: 14.0)] 

     view.addSubview(textView) 

     view.addConstraint(NSLayoutConstraint(item: view, attribute: .leading, relatedBy: .equal, toItem: textView, attribute: .leading, multiplier: 1.0, constant: 0.0)) 
     view.addConstraint(NSLayoutConstraint(item: view, attribute: .top, relatedBy: .equal, toItem: textView, attribute: .top, multiplier: 1.0, constant: 0.0)) 
     view.addConstraint(NSLayoutConstraint(item: view, attribute: .bottom, relatedBy: .equal, toItem: textView, attribute: .bottom, multiplier: 1.0, constant: 0.0)) 
     view.addConstraint(NSLayoutConstraint(item: view, attribute: .trailing, relatedBy: .equal, toItem: textView, attribute: .trailing, multiplier: 1.0, constant: 0.0)) 

     boldButton.setTitle("BOLD", for: .normal) 
     boldButton.addTarget(self, action: #selector(toggleBold), for: .touchUpInside) 
     boldButton.translatesAutoresizingMaskIntoConstraints = false 

     view.addSubview(boldButton) 
     view.addConstraint(NSLayoutConstraint(item: view, attribute: .leading, relatedBy: .equal, toItem: boldButton, attribute: .leading, multiplier: 1.0, constant: 0.0)) 
     view.addConstraint(NSLayoutConstraint(item: boldButton, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 64.0)) 
     view.addConstraint(NSLayoutConstraint(item: view, attribute: .bottom, relatedBy: .equal, toItem: boldButton, attribute: .bottom, multiplier: 1.0, constant: 0.0)) 
     view.addConstraint(NSLayoutConstraint(item: view, attribute: .trailing, relatedBy: .equal, toItem: boldButton, attribute: .trailing, multiplier: 1.0, constant: 0.0)) 

    } 

    @objc func toggleBold() { 
     boldButton.isSelected = !boldButton.isSelected 
     if boldButton.isSelected { 
      textView.typingAttributes = [NSAttributedStringKey.font.rawValue: UIFont.boldSystemFont(ofSize: 14.0)] 
     } else { 
      textView.typingAttributes = [NSAttributedStringKey.font.rawValue: UIFont.systemFont(ofSize: 14.0)] 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
     if text.contains("\n") && boldButton.isSelected { 
      toggleBold() 
     } 
     return true 
    } 

} 
関連する問題