我在自定义UITextView的初始化中称呼它:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textChanged:)
name:UITextViewTextDidChangeNotification
object:self];
通过编程设置textChanged
时未调用方法textView.text = @""
关于我在做什么错的任何想法?
您不应该将self
传递给最后一个参数,该参数是notificationSender,这意味着您只想观察self
发送的通知。
观察者是这样:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textChanged:)
name:UITextViewTextDidChangeNotification
object:nil];
希望它能提供帮助。
提到的委托模式@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中所述。
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()
}