-1

我有ViewControllerUITextField顶视图)和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

视图控制器.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 并没有改变他的框架。

4

1 回答 1

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;
    }];
}
于 2013-05-05T12:30:36.293 回答