UITextView UITextViewTextDidChangeNotification在文本的编程更改时未调用

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

我在自定义UITextView的初始化中称呼它:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(textChanged:)
                                                 name:UITextViewTextDidChangeNotification
                                               object:self];

通过编程设置textChanged时未调用方法textView.text = @""

关于我在做什么错的任何想法?

ios iphone input ios8 uitextview
3个回答
5
投票

您不应该将self传递给最后一个参数,该参数是notificationSender,这意味着您只想观察self发送的通知。

观察者是这样:

[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(textChanged:)
                                      name:UITextViewTextDidChangeNotification
                                      object:nil];

希望它能提供帮助。


1
投票

提到的委托模式@Prince的工作方式如下。在您的自定义UITextView初始化中:

[self setDelegate:self];

然后执行appropriate delegate method

#pragma - UITextViewDelegate

- (void)textViewDidChange:(UITextView *)textView
{
    // Move the body of textChanged here
    // ...
}

[这是管理对亲密/ 1:1关系的更改做出响应的首选方法,如this excellent post中所述。


0
投票
extension UITextView {

func centerVertically() {
    let fittingSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude)
    let size = sizeThatFits(fittingSize)
    let topOffset = (bounds.size.height - size.height * zoomScale) / 2
    let positiveTopOffset = max(1, topOffset)
    contentOffset.y = -positiveTopOffset
}

}

//要在编辑时更新文本,请使用以下代码。

  func textViewDidChange(_ textView: UITextView) {
    textView.centerVertically()
}
© www.soinside.com 2019 - 2024. All rights reserved.