对于NSTextField,textField:shouldReplaceCharactersInRange是否有等价物?

问题描述 投票:1回答:2

我想在更改和操作它之前捕获NSTextField中的输入文本。

textField:shouldReplaceCharactersInRangeUITextFieldtextView:shouldChangeTextInRangeNSTextView

更新:我不介意是否会触发textDidChange(notification: NSNotification)

macos cocoa nstextfield nstextview
2个回答
1
投票

当你的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

-1
投票

这个怎么样:

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))
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.