首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将以下文本添加到uitextfield

如何将以下文本添加到uitextfield
EN

Stack Overflow用户
提问于 2017-08-14 05:31:20
回答 5查看 2K关注 0票数 1

我有一个名为letschat的文本字段。现在,每当我开始输入我的文本框时,我都想将我的textfield显示为some @letschat。当我的textfield为空时,我的占位符必须显示。是我做的。但是,每当我开始输入文本字段时,我都想设置。不管我用什么打字,我都希望这个文本也能看到,比如:

一些@Lletschat

我该怎么做?

EN

回答 5

Stack Overflow用户

发布于 2017-08-14 13:11:19

我创建了一个UITextField子类,它使用占位符(如果设置)作为后缀。据我所知,一切都如期而至。也许需要一些调整来适应你的需要。

如果有什么不清楚的地方,请随便问:

代码语言:javascript
复制
class SuffixTextField: UITextField {

    override init(frame: CGRect) {
        super.init(frame: frame)
        sharedInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        sharedInit()
    }

    private func sharedInit() {
        addTarget(self, action: #selector(textChanged), for: .editingChanged)
    }

    override var text: String? {
        didSet {
            selectedTextRange = maxTextRange
        }
    }

    override var attributedText: NSAttributedString? {
        didSet {
            selectedTextRange = maxTextRange
        }
    }

    @objc private func textChanged() {
        if let currentText = text, let placeholder = placeholder {
            if currentText == placeholder {
                self.text = nil
            } else if !currentText.hasSuffix(placeholder) {
                self.text = currentText + placeholder
            }
        }
    }

    private var maxCursorPosition: UITextPosition? {
        guard let placeholder = placeholder, !placeholder.isEmpty else { return nil }
        guard let text = text, !text.isEmpty else { return nil }
        return position(from: beginningOfDocument, offset: (text as NSString).range(of: placeholder, options: .backwards).location)
    }

    private var maxTextRange: UITextRange? {
        guard let maxCursorPosition = maxCursorPosition else { return nil }
        return textRange(from: maxCursorPosition, to: maxCursorPosition)
    }

    override var selectedTextRange: UITextRange? {
        get { return super.selectedTextRange }
        set {
            guard let newRange = newValue,
                let maxCursorPosition = maxCursorPosition else {
                    super.selectedTextRange = newValue
                    return
            }

            if compare(maxCursorPosition, to: newRange.start) == .orderedAscending {
                super.selectedTextRange = textRange(from: maxCursorPosition, to: maxCursorPosition)
            } else if compare(maxCursorPosition, to: newRange.end) == .orderedAscending {
                super.selectedTextRange = textRange(from: newRange.start, to: maxCursorPosition)
            } else {
                super.selectedTextRange = newValue
            }
        }
    }

}

在这里您可以看到预览:https://www.dropbox.com/s/etkbme37wuxbw1q/preview.mov?dl=0

票数 1
EN

Stack Overflow用户

发布于 2017-08-14 05:45:11

使类符合UITextfieldDelegate,然后分配textfield.delegate = self

现在,如果您希望在用户端类型之后追加@letschat,那么添加这个Delegate方法。

代码语言:javascript
复制
func textFieldDidEndEditing(textField: UITextField) {
    textField.text = "\(textField.text)@letschat"
}

或者在打字的时候想要的话。

代码语言:javascript
复制
textField.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)

func textFieldDidChange(textField: UITextField) {
    if textField.containsString("@letschat")  {
        textField.text = textField.text.stringByReplacingOccurrencesOfString("@letschat", withString: "")
    }

    textField.text = "\(textField.text)@letschat"

}

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-08-14 05:47:14

您可以使用action of UITextField textFieldDidChange,每次更改textField文本时都会得到调用。

就像这样:

代码语言:javascript
复制
func textChangedAction(sender:UITextFiled) {
   if sender.text.rangeOfString("@Lletschat") != nil{ 
       sender.text = sender.text.replacingOccurrences(of: "@Lletschat", with: "")  
   }
   sender.text = "\(sender.text!) @Lletschat"
}

如果要更改特定文本的颜色,可以检查here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45667948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档