我在自定义UITextView的初始化中调用它:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textChanged:)
name:UITextViewTextDidChangeNotification
object:self];
当我以编程方式设置textChanged
textView.text = @""
关于我做错了什么的想法?
答案 0 :(得分:5)
您不应该将self
传递给最后一个参数,此参数是notificationSender,这意味着您只想观察self
发送的通知。
观察者是这样的:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textChanged:)
name:UITextViewTextDidChangeNotification
object:nil];
希望它可以提供帮助。
答案 1 :(得分: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中所述。
答案 2 :(得分: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()
}
答案 3 :(得分:0)
您可以创建自己的类并覆盖文本属性
class MyTextView: UITextView {
override var text: String! {
didSet {
//do your stuff
}
}
}