首先我們來(lái)說(shuō)一說(shuō)字?jǐn)?shù)限制的問(wèn)題
由于TextField的代理方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
當(dāng)輸入框內(nèi)容有變化時(shí),其不能完全捕捉到變化,所以我們做字?jǐn)?shù)限制時(shí),最好不要用此方法。我們可以通過(guò)給textfield添加事件的方法來(lái)限制其字?jǐn)?shù),
[textfield addTarget:self action:@selector(textFieldValueChange:) forControlEvents:UIControlEventValueChanged];
其中textFieldValueChange是當(dāng)textfield內(nèi)容有變化時(shí)就會(huì)調(diào)用,下面我們開(kāi)始在此方法中限制字?jǐn)?shù)
-(void) textFieldValueChange:(UITextField *) textfield
{
//因?yàn)檩斎雰?nèi)容可能是漢字,所以要在沒(méi)有高亮的時(shí)候,來(lái)獲取當(dāng)前輸入框的內(nèi)容,再去限制字?jǐn)?shù),否則會(huì)有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];
}
}
}
下面來(lái)討論鍵盤遮蓋問(wèn)題
這是我們常見(jiàn)到的狀況,所以不做解釋了,直接說(shuō)解決方法。
首先我們添加一個(gè)鍵盤的NSNotification
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
然后在接收通知的地方獲取鍵盤的y值變化,根據(jù)此y值來(lái)改變你需要改變的view
//解決鍵盤遮蓋問(wèn)題
-(void)keyboardDidChangeFrame:(NSNotification *)noti
{
NSDictionary *userInfo = noti.userInfo;
// 動(dòng)畫(huà)的持續(xù)時(shí)間
double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
// 鍵盤的frame
CGRect keyboardF = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
//鍵盤的Y值
CGFloat keyboardY = keyboardF.origin.y;
//根據(jù)鍵盤的Y值來(lái)改變你需要改變的View
}