我有一个名为letschat的文本字段。现在,每当我开始输入我的文本框时,我都想将我的textfield显示为some @letschat。当我的textfield为空时,我的占位符必须显示。是我做的。但是,每当我开始输入文本字段时,我都想设置。不管我用什么打字,我都希望这个文本也能看到,比如:
一些@Lletschat
我该怎么做?
发布于 2017-08-14 13:11:19
我创建了一个UITextField子类,它使用占位符(如果设置)作为后缀。据我所知,一切都如期而至。也许需要一些调整来适应你的需要。
如果有什么不清楚的地方,请随便问:
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
发布于 2017-08-14 05:45:11
使类符合UITextfieldDelegate,然后分配textfield.delegate = self
现在,如果您希望在用户端类型之后追加@letschat,那么添加这个Delegate方法。
func textFieldDidEndEditing(textField: UITextField) {
textField.text = "\(textField.text)@letschat"
}或者在打字的时候想要的话。
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"
}希望这能有所帮助。
发布于 2017-08-14 05:47:14
您可以使用action of UITextField textFieldDidChange,每次更改textField文本时都会得到调用。
就像这样:
func textChangedAction(sender:UITextFiled) {
if sender.text.rangeOfString("@Lletschat") != nil{
sender.text = sender.text.replacingOccurrences(of: "@Lletschat", with: "")
}
sender.text = "\(sender.text!) @Lletschat"
}如果要更改特定文本的颜色,可以检查here。
https://stackoverflow.com/questions/45667948
复制相似问题