我想在更改和操作它之前捕获NSTextField中的输入文本。
像textField:shouldReplaceCharactersInRange
为UITextField
,textView:shouldChangeTextInRange
为NSTextView
。
更新:我不介意是否会触发textDidChange(notification: NSNotification)
当你的NSTextField
聚焦时,它就成了被称为“场编辑”的NSTextView
的代表。因此,您的NSTextField
可以符合NSTextViewDelegate
协议,这意味着您可以像这样实现textView:shouldChangeTextInRange:replacementString:
:
@interface MyTextField : NSTextField <NSTextViewDelegate>
@end
@implementation MyTextField
- (BOOL)textView:(NSTextView *)textView
shouldChangeTextInRange:(NSRange)affectedCharRange
replacementString:(NSString *)replacementString
{
// Do your thing.
}
@end
这个怎么样:
import Cocoa
class ViewController: NSViewController {
@IBOutlet var textField: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
textField.delegate = self
}
}
extension ViewController: NSTextFieldDelegate {
func controlTextDidChange(_ obj: Notification) {
if let textField = obj.object as? NSTextField {
NSLog("%@", textField.stringValue)
// how about set the textField's max length
textField.stringValue = String(textField.stringValue.prefix(6))
}
}
}