我ViewController
UITextField
(顶视图)和UITextView
(底视图)。当用户开始编辑时,我希望将UITextView
移动到视图的顶部。
当用户从UITextView
开始编辑时,一切都很好,但是当用户首先想要编辑UITextField
然后UITextView
(没有隐藏键盘)时,它就无法正常工作。隐藏UITextField
,但UITextView
不会更改其框架。
我尝试使用UIKeyboardDidShowNotification
,但仅在键盘弹出时调用它。
重现问题的代码: ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextViewDelegate>
@property (weak, nonatomic) IBOutlet UITextField *titleTF;
@property (weak, nonatomic) IBOutlet UITextView *bodyTV;
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)textViewDidBeginEditing:(UITextView *)textView {
self.titleTF.hidden=YES;
CGRect newFrame=CGRectMake(20, 20, textView.frame.size.width, 100);
textView.frame=newFrame;
}
@end
运行应用程序并单击UITextView,应用程序将如下所示: http://imageshack.us/photo/my-images/694/32568213.png 现在一切都很好(UITextField被隐藏,UITextView被移动并调整大小)。
再次启动应用。首先单击UITextField,然后单击UITextView。应用看起来像这样: http://imageshack.us/photo/my-images/843/66433184.png UITextField是隐藏的,但是UITextView没有改变他的框架。
答案 0 :(得分:1)
在TextView编辑开始时向上移动视图, 编辑结束时将其向下移动。
只需将这两种方法,
-(void) textViewDidBeginEditing:(UITextView *)textView{
CGRect frame = self.view.frame;
frame.origin.y = -(textView.frame.origin.y + textView.frame.size.height);
[UIView animateWithDuration:0.3f animations:^{
self.view.frame = frame;
}];
}
-(void) textViewDidEndEditing:(UITextView *)textView{
CGRect frame = self.view.frame;
frame.origin.y = 0;
[UIView animateWithDuration:0.3f animations:^{
self.view.frame = frame;
}];
}