2013-06-28 2 views
1

У меня проблема с перемещением вверх по моему UITextview внизу.Textview не может двигаться вверх при начале редактирования

UITextField работает нормально, но UITextView не работает.

Вот мой код, когда нажимаем TextView, он появляется на панели инструментов. Пожалуйста, помогите

- (IBAction)HideKeyboard:(id)sender { 
    [self.myTextField resignFirstResponder]; 
    [self.myTextView resignFirstResponder]; 
    [self.myScrollView setContentOffset:CGPointZero animated:YES]; 
} 
+0

self.myTextView.delegate = ДА? любезно проверьте это. Возможно, вы пропустили это. – Bala

+0

Нет, я уже установил делегата textview. Вы знаете, почему? –

+0

Предполагается, что это '[self.myTextView setContentOffset: CGPointZero animated: YES];' вместо этого? –

ответ

0

Ваш TextView должен находиться под ScrollView.

Попробуйте это.

В методе ViewdidLoad набор уведомлений для клавиатуры

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

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

-(void)keyboardDidShow:(NSNotification *)notif 
{ 

scrollView.contentSize=CGSizeMake(self.view.frame.size.width, scrollOriginalFrame.size.height+350); 
    NSTimeInterval duration = 0.6; 

if(txt_preRemindText.isFirstResponsder) 
    { 
     [UIView animateWithDuration:duration animations: 
     ^{ 
      [scrollView setContentOffset:CGPointMake(0,260) animated:YES]; 

     }]; 

    } 

} 
1

Я предполагаю, что вам нужно переместить UITextView над клавиатурой, то попробуйте следующий подход

Добавить TPKeyboardAvoiding Framework в свой проект, который будет принимать уход за перемещением UITextField's и UITextView's над клавиатурой.

+0

@ jason-lau Если вы найдете ** любые ** ответы полезны, пожалуйста ** повысите его **, и если ответ правильный, то пожалуйста ** принять его ** это поможет удалить вопрос из списка ** неотвеченный список вопросов ** – icodebuster

0

Используйте этот код.

// Этот код добавляется под импортированным файлом.

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

// И после добавления этой функции.

-(void) textViewDidBeginEditing:(UITextView *)textView 

{

CGRect textFieldRect = [self.view.window convertRect:textView.bounds fromView:textView]; 
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; 
} 

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

if(orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown){ 

    animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 

} 
else 
{ 
    animatedDistance = floor(LANDSCAPE_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]; 
    } 

// И добавить этот метод для TextView

- (void)textViewDidEndEditing:(UITextView *)textView 
{ 

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)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
if ([text isEqualToString:@"\n"]) 
{ 
    [txt_description resignFirstResponder]; 
    return NO; 
} 
return YES; 

}

Ваш взгляд, если вы редактируете в TextView.