2013-05-05 64 views
-1

我有ViewControllerUITextField(俯视图)和UITextView(仰视图)。我想在用户开始编辑时将UITextView移动到视图的顶部。 当用户从UITextView开始编辑时,一切都很好,但是当用户首先要编辑UITextField,然后UITextView(没有隐藏键盘)时,它不起作用。 UITextField已隐藏,但UITextView不会更改其框架。 我试图使用UIKeyboardDidShowNotification,但只有在弹出键盘时才调用它。更改UITextView框架

码来重现问题: 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

请问这个方法火,当你开始编辑?你试过NSLog吗? – 2013-05-05 12:01:42

+0

是的,它的工作。它总是隐藏titleTF。 – 2013-05-05 12:03:16

+0

你在这个视图控制器中只有一个textView吗? – 2013-05-05 12:19:19

回答

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; 
    }]; 
} 
+0

工作正确吗? – 2013-05-05 12:36:37

+0

不是我想要的。它会移动根父级,但是我的UITextView不是完全可见的,因为它大于屏幕高度 - 键盘高度。我想调整UITextView的大小以填充屏幕高度(键盘左侧)。 – 2013-05-05 12:48:52