2017-07-08 62 views
0

我給文本視圖來推送一些字符串。Swift 3 - uitextview中的字符數限制

我正在應用以下方法來限制長度爲140個字符的字符數。在一個的viewController

import UIKit 
import SVProgressHUD 
import Toaster 

class ViewController: UIViewController , UITextViewDelegate , 
UITextFieldDelegate { 


var checktoaster = false 
@IBOutlet weak var txtDescription: UITextView! 



func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    if txtDescription == textView 
    { 
     guard let tex = textView.text else { return true } 
     let newLength = tex.characters.count + text.characters.count - range.length 
     if !(newLength <= 140) 
     { 
      if checktoaster == false 
      { 
       checktoaster = true 
       let toast = Toast(text: "You have write only 140 character.", duration: Delay.long) 
       toast.show() 
      } 
     } 
     else 
     { 
      checktoaster = false 
     } 
     return newLength <= 140 //Bool 
    } 
    return true 

    } 

} 

這裏

代碼是TextView的類

import UIKit 
public class LetsTextView : UITextView , UITextViewDelegate{ 

required public init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    NotificationCenter.default.addObserver(self, selector: #selector(LetsTextView.refreshPlaceholder), name: NSNotification.Name.UITextViewTextDidChange, object: self) 
} 

override init(frame: CGRect, textContainer: NSTextContainer?) { 
    super.init(frame: frame, textContainer: textContainer) 
    NotificationCenter.default.addObserver(self, selector: #selector(LetsTextView.refreshPlaceholder), name: NSNotification.Name.UITextViewTextDidChange, object: self) 
} 

override public func awakeFromNib() { 
    super.awakeFromNib() 
    NotificationCenter.default.addObserver(self, selector: #selector(LetsTextView.refreshPlaceholder), name: NSNotification.Name.UITextViewTextDidChange, object: self) 
} 

deinit { 
    NotificationCenter.default.removeObserver(self) 
} 


@IBInspectable public var placeholder : String? { 

    get { 

     return placeholderLabel?.text 
    } 

    set { 

     if placeholderLabel == nil { 
      var frm = self.bounds.insetBy(dx: 5, dy: 6) 
      frm.size.height = 20 
      placeholderLabel = UILabel(frame:frm) 

      if let unwrappedPlaceholderLabel = placeholderLabel { 

       unwrappedPlaceholderLabel.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
       unwrappedPlaceholderLabel.lineBreakMode = .byWordWrapping 
       unwrappedPlaceholderLabel.numberOfLines = 0 
       unwrappedPlaceholderLabel.font = self.font 
       unwrappedPlaceholderLabel.backgroundColor = UIColor.clear 
       unwrappedPlaceholderLabel.textColor = UIColor.gray//UIColor(red: 255/255, green: 190/255, blue: 70/255, alpha: 1.0) 
       unwrappedPlaceholderLabel.alpha = 0 
       addSubview(unwrappedPlaceholderLabel) 
      } 
     } 

     placeholderLabel?.text = newValue 
     refreshPlaceholder() 
    } 
} 

func refreshPlaceholder() { 

    if text.characters.count != 0 { 
     placeholderLabel?.alpha = 0 
    } else { 
     placeholderLabel?.alpha = 1 
    } 
} 


override public var text: String! { 

    didSet { 

     refreshPlaceholder() 

    } 
} 

override public var font : UIFont? { 

    didSet { 

     if let unwrappedFont = font { 
      placeholderLabel?.font = unwrappedFont 
     } else { 
      placeholderLabel?.font = UIFont.systemFont(ofSize: 12) 
     } 
    } 
} 

override public var delegate : UITextViewDelegate? { 

    get { 
     refreshPlaceholder() 
     return super.delegate 
    } 

    set { 

    } 
    } 

} 

// 任何解決方案,請

+0

你有沒有設置視圖控制器爲您TextView的代表? 'txtDescription.delegate = self' –

+0

是的,我設置了委託 –

回答

2
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
     if txtTwitt.text.characters.count <= 140 
     { 
      // Code here 
     } 
     else 
     { 
      //Code Here 
     } 
     return true 
    }