2011-06-08 39 views
0

我的情况:查看调整大小以全屏幕应用程序被激活后

我有我的观点的底部(最外层视图不滚动)文本输入字段。当有人关注输入时,我缩小视图以容纳键盘(具体来说,我减去键盘的高度并将视图设置为新的高度)。

我的问题:

不管什么时候需要从我的ViewController焦点离开后不久(例如推送通知或有人打home键和回来的应用程序后)返回它的观点似乎自动调整大小,以便文本输入回到屏幕的底部,但是键盘仍然显示。

我想要什么:

我想以保持它的大小应用程序恢复焦点之前了。键盘应该保持显示状态,并且文本输入显示在其上方,不会移回到键盘后面的屏幕底部。

有谁知道我可能会做错什么,或者我需要做什么来获得这种行为?

+0

反而萎缩您的观点将有可能沿y轴移动你的看法了吗? – bbarnhart 2011-06-08 18:00:42

+0

您的UITextfieldDelegate重获焦点后是否发送了-textFieldDidBeginEditing:消息? – JoBu1324 2011-06-08 18:05:47

+0

应用程序重新获得焦点后,我不会收到textFieldDidBeginEditing消息(我首先点击输入时会得到它)。当应用程序重新获得焦点时,文本输入实际上不会失去焦点 - 如果我在键盘上键入,我可以看到自动完成显示 – 2011-06-08 18:09:05

回答

0

试试这个代码....

static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; 
    static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; 
    static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8; 
    static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216; 
    static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162; 



    - (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 

    CGRect textFieldRect =  [self.view.window convertRect:textField.bounds fromView:textField]; 

    CGRect viewRect = 
    [self.view.window convertRect:self.view.bounds fromView:self.view]; 


     CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; 
     CGFloat numerator = 
     midline - viewRect.origin.y 
     - MINIMUM_SCROLL_FRACTION * viewRect.size.height; 
     CGFloat denominator = 
     (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) 
     * viewRect.size.height; 
     CGFloat heightFraction = numerator/denominator; 


     if (heightFraction < 0.0) 
     { 
     heightFraction = 0.0; 
     } 
     else if (heightFraction > 1.0) 
     { 
     heightFraction = 1.0; 
     } 



     animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 



     CGRect viewFrame = self.view.frame; 
     viewFrame.origin.y -= animatedDistance; 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

     [self.view setFrame:viewFrame]; 

     [UIView commitAnimations]; 
    } 



- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y += animatedDistance; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    [self.view setFrame:viewFrame]; 

    [UIView commitAnimations]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 

    [textField resignFirstResponder]; 
    return YES; 
} 
相关问题