![](/img/trans.png)
[英]Obj-C - Dismiss keyboard by tapping anywhere on screen from UITextView?
[英]Obj-c: Shift uitextview up when keyboard activated?
当我的用户在我的 textview 中键入时,我希望 textview 向上移动,以便键盘不会覆盖它。 我正在使用下面的代码,但没有任何东西向上移动,键盘继续覆盖我的文本视图。 我怎样才能解决这个问题?
视图控制器.h
@property (strong, nonatomic) IBOutlet UITextView *replyField;
视图控制器.m
- (void)viewDidLoad {
[super viewDidLoad];
[self.replyField setReturnKeyType:UIReturnKeyDefault];
}
- (void)dismissKeyboard
{
[self.replyField resignFirstResponder];
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
[self animateTextView: YES];
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
[self animateTextView:NO];
}
- (void) animateTextView:(BOOL) up
{
const int movementDistance = -250; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed
int movement= movement = (up ? -movementDistance : movementDistance);
NSLog(@"%d",movement);
[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.inputView.frame, 0, movement);
[UIView commitAnimations];
}
看起来animateTextView
方法中有 2 个错误:
原始值 -250 导致错误的移动方向(up ? -movementDistance : movementDistance)
self.view.frame = CGRectOffset(self.inputView.frame, 0, movement);
将改变 self.view 的框架,而不是 textView 的。
改进(在我的 Xcode 中测试的代码):
- (void)textViewDidBeginEditing:(UITextView *)textView{
[self animateTextView:textView isUp:YES];
}
- (void)textViewDidEndEditing:(UITextView *)textView{
[self animateTextView:textView isUp:NO];
}
- (void)animateTextView:(UITextView *)textView isUp:(BOOL)up{
const int movementDistance = 250; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed
int movement = (up ? -movementDistance : movementDistance);
NSLog(@"%d",movement);
[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
textView.frame = CGRectOffset(textView.frame, 0, movement);
[UIView commitAnimations];
}
//To close keyboard when click Return key.
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}
就像@El Tomato 说的,记得为 textView 设置委托:
[self.replyField setDelegate:self];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.