2013-05-25 142 views
3

我有兩個UITextViews,一個在UIView的頂部,另一個在UIView的底部。鍵盤出現時移動UIView

我使用這段代碼,當鍵盤出現時移動UIView。

- (void) viewDidLoad 
{ 

[[NSNotificationCenter defaultCenter] addObserver:self 
           selector:@selector(keyboardWillShow) 
            name:UIKeyboardWillShowNotification 
            object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
           selector:@selector(keyboardWillHide) 
            name:UIKeyboardWillHideNotification 
            object:nil]; 

} 


-(void)keyboardWillShow { 
    // Animate the current view out of the way 
    [UIView animateWithDuration:0.3f animations:^ { 
     self.frame = CGRectMake(0, -160, 320, 480); 
    }]; 
} 

-(void)keyboardWillHide { 
    // Animate the current view back to its original position 
    [UIView animateWithDuration:0.3f animations:^ { 
     self.frame = CGRectMake(0, 0, 320, 480); 
    }]; 
} 

當我從底部使用UITextView時,它很好用。但我的問題是,當我想使用從UIView頂部的UITextView,鍵盤出現,UIView上移,而且我的頂級UITextView向上移動。請幫助我,如果用戶想從頂部輸入UITextView上的文本,我不想移動UIView。

回答

7

一個非常簡單的方法來做到這一點,我在我的項目中使用TPKeyboardAvoiding圖書館。

https://github.com/michaeltyson/TPKeyboardAvoiding

下載源,4個文件拖放到你的項目。在InterfaceBuilder中確保你的TextViews在UIScrollView或UITableView中,然後將該滾動視圖或tableview的類更改爲TPAvoiding子類。

如果你不想這樣做,你的其他選擇是檢查正在使用的TextView,只有動畫,如果你想鍵盤是一個選擇,即:

-(void)keyboardWillShow { 
    // Animate the current view out of the way 
    if ([self.textFieldThatNeedsAnimation isFirstResponder]) { 
     [UIView animateWithDuration:0.3f animations:^ { 
     self.frame = CGRectMake(0, -160, 320, 480); 
     }]; 
     self.animated = YES; 
    } 
} 

-(void)keyboardWillHide { 
    // Animate the current view back to its original position 
    if (self.animated) { 
     [UIView animateWithDuration:0.3f animations:^ { 
      self.frame = CGRectMake(0, 0, 320, 480); 
     }]; 
     self.animated = NO; 
    } 
} 
+1

大答案。非常感謝。如此簡單,如此之快。我喜歡。 –

+0

好,很高興它爲你工作! – powerj1984

+1

這很好,除非你試圖減少你的應用程序內存佔用。要警告的是,向UIScrollView添加子視圖非常昂貴,並且可能會顯着增加內存使用量。 –

相關問題