UITextField继承UIControl
1.文字永远是一行,不能显示多行文字
2.有placehoder属性设置占位文字
3.继承自UIControl
4.监听行为
1> 设置代理
2> addTarget:action:forControlEvents:
3> 通知:UITextFieldTextDidChangeNotification
UITextView继承UIScrollView
1.能显示任意行文字
2.不能设置占位文字(可以通过创建个UILabel子控件来加载在UITextView上实现)
3.继承自UIScollView
4.监听行为
1> 设置代理
2> 通知:UITextViewTextDidChangeNotification
相同点:两者都可以监听系统键盘的变化,可以据此自定义键盘:注意:两者在点击编辑内容时,系统 自动加载系统键盘,要想自定义键盘,必须先取消第一响应者[UITextView / UITextField resignFirstResponder],然后设置inputView;如果想实现自定义键盘和系统的键盘的自由切换,需要在设置inputView时,这样设置:textView.inputView = textView.inputView == nil ? emoticonKeyboardView : nil,然后恢复第一响应者[UITextView / UITextField becomeFirstResponder],即可实现键盘的自由切换。
键盘事件
- UIKeyboardWillShowNotification
- UIKeyboardDidShowNotification
- UIKeyboardWillHideNotification
- UIKeyboardDidHideNotification
使用场景:
- 计算键盘的高度,调整UI布局
- 根据键盘显示隐藏执行UI的动画
键盘监听代码如下:(self.toolBar是自定义的键盘,继承至UIToolBar)
- (void)regiserNotification{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
- (void)keyboardWillChange:(NSNotification *)notification{
NSLog(@"%@",notification);
CGRect rect = [[[notification userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
NSLog(@"%f---",rect.origin.y);
CGFloat offsetY = - kScreenHeight + rect.origin.y;
NSLog(@"---offsetY %f",offsetY);
[self.toolBar mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(offsetY);
}];
[self.view layoutIfNeeded];
}
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
原文链接:https://blog.csdn.net/weixin_34185560/article/details/91605931