首先我们来说一说字数限制的问题
由于TextField的代理方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
当输入框内容有变化时,其不能完全捕捉到变化,所以我们做字数限制时,最好不要用此方法。我们可以通过给textfield添加事件的方法来限制其字数,
[textfield addTarget:self action:@selector(textFieldValueChange:) forControlEvents:UIControlEventValueChanged];
其中textFieldValueChange是当textfield内容有变化时就会调用,下面我们开始在此方法中限制字数
-(void) textFieldValueChange:(UITextField *) textfield
{
//因为输入内容可能是汉字,所以要在没有高亮的时候,来获取当前输入框的内容,再去限制字数,否则会有crash
UITextRange *textRange = [textView markedTextRange];
UITextPosition *position = [textView positionFromPosition:textRange.start offset:0];
if (!position)
{
NSString *textStr = textView.text;
if (textStr.length>500)
{
textfield.text = [textStr substringToIndex:500];
}
}
}
下面来讨论键盘遮盖问题
这是我们常见到的状况,所以不做解释了,直接说解决方法。
首先我们添加一个键盘的NSNotification
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
然后在接收通知的地方获取键盘的y值变化,根据此y值来改变你需要改变的view
//解决键盘遮盖问题
-(void)keyboardDidChangeFrame:(NSNotification *)noti
{
NSDictionary *userInfo = noti.userInfo;
// 动画的持续时间
double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
// 键盘的frame
CGRect keyboardF = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
//键盘的Y值
CGFloat keyboardY = keyboardF.origin.y;
//根据键盘的Y值来改变你需要改变的View
}