2017-10-22 41 views
-1

當我的用戶輸入我的文本視圖時,我希望textview向上移動,以便鍵盤不會覆蓋它。我使用下面的代碼,但沒有任何東西向上移動,鍵盤繼續覆蓋我的文本視圖。我怎樣才能解決這個問題?Obj-c:鍵盤激活時向上移動uitextview?

ViewController.h

@property (strong, nonatomic) IBOutlet UITextView *replyField; 

ViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 


[self.replyField setReturnKeyType:UIReturnKeyDefault]; 

} 

- (void)dismissKeyboard 
{ 
    [self.replyField resignFirstResponder]; 

} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    [self animateTextView: YES]; 
} 


- (void)textViewDidEndEditing:(UITextView *)textView 
{ 
    [self animateTextView:NO]; 
} 

- (void) animateTextView:(BOOL) up 
{ 
    const int movementDistance = -250; // tweak as needed 
    const float movementDuration = 0.3f; // tweak as needed 
    int movement= movement = (up ? -movementDistance : movementDistance); 
    NSLog(@"%d",movement); 

    [UIView beginAnimations: @"anim" context: nil]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration: movementDuration]; 
    self.view.frame = CGRectOffset(self.inputView.frame, 0, movement); 
    [UIView commitAnimations]; 
} 
+0

您沒有設置文本字段委託。 –

+0

@ElTomato正確:)謝謝! – Brittany

回答

0

看起來有2個錯誤在animateTextView方法:

  • 原始值-250 CAU與錯誤的移動方向(up ? -movementDistance : movementDistance)

  • self.view.frame = CGRectOffset(self.inputView.frame, 0, movement); 將改變self.view的框架,而不是textView的。

的改進(代碼在我的Xcode測試):

- (void)textViewDidBeginEditing:(UITextView *)textView{ 
    [self animateTextView:textView isUp:YES]; 
} 

- (void)textViewDidEndEditing:(UITextView *)textView{ 
    [self animateTextView:textView isUp:NO]; 
} 

- (void)animateTextView:(UITextView *)textView isUp:(BOOL)up{ 
    const int movementDistance = 250; // tweak as needed 
    const float movementDuration = 0.3f; // tweak as needed 
    int movement = (up ? -movementDistance : movementDistance); 
    NSLog(@"%d",movement); 

    [UIView beginAnimations: @"anim" context: nil]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration: movementDuration]; 
    textView.frame = CGRectOffset(textView.frame, 0, movement); 
    [UIView commitAnimations]; 
} 

//To close keyboard when click Return key. 
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    if ([text isEqualToString:@"\n"]) { 
     [textView resignFirstResponder]; 
     return NO; 
    } 
    return YES; 
} 

而像@El番茄說,記得設置委託TextView的:

[self.replyField setDelegate:self]; 
相關問題