Есть ли эквивалент для textField: shouldReplaceCharactersInRange для NSTextField? - PullRequest
0 голосов
/ 29 декабря 2018

Я хочу перехватить введенный текст в NSTextField до его изменения и манипулировать им.

, как textField:shouldReplaceCharactersInRange для UITextField и textView:shouldChangeTextInRange для NSTextView.

Обновление: Я не против, если textDidChange(notification: NSNotification) будет запущен или нет

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Когда ваш 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
0 голосов
/ 29 декабря 2018

Как насчет этого:

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))
        }
    }
}
...