火柴盒發(fā)話題的輸入框惯豆,之前寫的效果一直不是很好池磁,
昨天折騰到兩點多,終于弄出了還可以的效果楷兽。
全局變量
//暫存鍵盤的偏移量
@property(nonatomic,assign)CGFloatkeyboardTy;
//輸入后輸入框增加的高度
@property(nonatomic,assign)CGFloatTextViewAddHeight;
鍵盤通知
- (void)keyBoardWillShow:(NSNotification *)note
{
CGRect rect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat ty = rect.size.height;
self.keyboardTy = ty;
……
}
- (void)keyBoardWillHide:(NSNotification *)note
{
self.keyboardTy = 0;
……
}
設(shè)置偏移量方法
-(void)setFrameOringin
{
CGFloat ty = self.keyboardTy;
CGFloat addHeight = self.TextViewAddHeight;
self.buttomView.hidden = NO;
self.buttomView.userInteractionEnabled = YES;
self.pullTableView.frame = CGRectMake(0, ty, COMMENT_TABLE_WIDTH, COMMENT_TABLE_HEIGHT-ty-addHeight);
self.buttomView.frame = CGRectMake(0,COMMENT_TABLE_HEIGHT-addHeight,COMMENT_TABLE_WIDTH,44+addHeight);
self.textField.frame = CGRectMake(17, 5, SCREEN_WIDTH-70, 34+addHeight);
self.placeHolderLabel.frame = CGRectMake(10, 2, self.textField.frame.size.width-10, self.textField.frame.size.height-2);
}
獲取鍵盤
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
DLog( @"textViewShouldChange");
//這個方法是將改變的值
NSInteger state = 0;
if ([text isEqualToString:@"\n"]) {
//如果這個字符是換行地熄,立刻改變frame的大小
state = 1;
}
if([text isEqualToString:@""]&& textView.text.length>0 )
{
//這個字符是刪除,且刪除掉的是換行
if ([[textView.text substringWithRange:NSMakeRange(textView.text.length -1,1)] isEqualToString:@"\n"]) {
state = 2;
};
}
NSString *textStr = @"";
if ([text isEqualToString:@""]&& textView.text.length>0) {
//刪除操作
textStr = [textView.text substringWithRange:NSMakeRange(0,textView.text.length -1)];
}
else
{
//正常
textStr = [NSString stringWithFormat:@"%@%@",textView.text,text];
}
[self textViewChange:textStr state:state];
return YES;
}
改變高度的方法
- (void)textViewChange:(NSString *)text state:(NSInteger)state {
NSString *tString = @"";
tString = self.textField.text;
NSInteger height = 0;
height = [GetLabelSize getStringRect:tString WithWidth:self.textField.frame.size.width andFont:self.textField.font].height;
DLog(@"textField中文字的高度是:%ld",(long)height);
//FONT15的情況下芯杀,一行17端考,后面每行都是17+18×(n-1);
//多于一行的時候,增加的高度
float addHeight;
if (height < 18) {
addHeight = 0;
}
else if(height > 17+18*4)
{
addHeight = 17+18*4;
}else
{
addHeight = height - 17;
}
if (state == 1)
{
//如果最后一個字符是換行揭厚,立刻改變frame的大小
addHeight = addHeight + 18;
if (addHeight > 17+18*4)
{
addHeight = 17+18*4;
}
}
if(state == 2)
{
//如果最后一個字符是刪除却特,且刪除了換行,立刻改變frame的大小
if (addHeight < 18) {
addHeight = 0;
}else
{
addHeight = addHeight - 18;
}
}
if (addHeight != self.TextViewAddHeight) {
self.TextViewAddHeight = addHeight;
[self setFrameOringin];
}
}
還存在要優(yōu)化的地方:
粘貼過來多行的沒辦法很好的顯示筛圆×衙鳎可以在
-(void)textViewDidChange:(UITextView*)textView
這個方法里優(yōu)化
簡書新手渣排版見諒~~
簡書已經(jīng)棄用,歡迎移步我的小專欄:
https://xiaozhuanlan.com/dahuihuiiOS