         }
     }
 
+    public var readOnly: Bool = false {
+        didSet {
+            unselectAllTagViewsAnimated()
+            textField.enabled = !readOnly
+            repositionViews()
+        }
+    }
+
     public var padding: UIEdgeInsets = UIEdgeInsets(top: 10.0, left: 8.0, bottom: 10.0, right: 16.0) {
         didSet {
             repositionViews()

        addSubview(textField)

        textField.onDeleteBackwards = {
            if self.textField.text?.isEmpty ?? true, let tagView = self.tagViews.last {
                self.selectTagView(tagView, animated: true)
                self.textField.resignFirstResponder()


    // MARK: - Tag selection

    public func selectTagView(tagView: WSTagView, animated: Bool = false) {
        if self.readOnly {
            return
        }
        tagView.selected = true
        tagViews.forEach() { item in
            if item != tagView {
