2014-10-13 4 views
1

Я пытаюсь переместить UIView, когда пользователь коснется текстового поля в веб-просмотре, потому что клавиатура будет закрывать веб-просмотр, и пользователи не смогут вводить текст, мои коды работают очень хорошо! на iOS 7 !!! но iOS 8 вид перемещается вверх, но когда пользователь выбирает другое текстовое поле (в веб-просмотре), UIView переходит в исходное положение !!! , Вот мой код:Перемещение UIView, когда отображается клавиатура UIWebView

/* _contactForm = UIWebView 
    _contactView = UIView */ 



- (void)viewDidLoad 
{ 
    [super 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 { 


     [[[_contactForm subviews] lastObject] setScrollEnabled:YES]; 

    if ([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPad) { 


    [UIView animateWithDuration:.20 
          delay:0 
         options:UIViewAnimationOptionCurveLinear animations:^ 
         { 

         [_contentView setFrame:CGRectMake(0, 37 , _contentView.frame.size.width, _contentView.frame.size.height)]; 


         } completion:nil]; 

    } 

} 




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

    [[[_contactForm subviews] lastObject] setScrollEnabled:NO]; 

    [UIView animateWithDuration:.20 
          delay:0 
         options:UIViewAnimationOptionCurveLinear animations:^ 
    { 

     [_contentView setFrame:CGRectMake(0, 176 , _contentView.frame.size.width, _contentView.frame.size.height)]; 

    }completion:nil]; 


    } 

} 

Я также попытался UIKeyboardDidHideNotification и UIKeyboardDidShowNotification, но не успех!

WebView загружает файл HTML из пучка, то это коды TextField в:

<form action="http://someurl.net/mail/mail.cshtml" method="post" onsubmit="return validate();"> 

    <input class="textInput" type="text" name="name" placeholder="NAME"/> 

    <div class="clearfix"></div> 
    <input class="textInput" type="email" name="email" placeholder="EMAIL"/> 

    <div class="clearfix"></div> 
    <input class="textInput" type="text" name="phone" placeholder="PHONE"/> 

    <div class="clearfix"></div> 
    <textarea name="msg" cols="19" rows="3" placeholder="MESSAGE"></textarea> 
    <div class="clearfix"></div> 
    <input type="submit" class="submit" value="SEND"/> 

</form> 
+0

Можете ли вы дать мне URL. –

+0

@KiritModi Пожалуйста, проверьте отредактированный ответ –

+0

, можете ли вы попытаться установить точку останова как для методов скрытия, так и для показа. Я хотел бы знать, вызваны ли оба из них, когда пользователь отбирает одно поле в другое. – Tuan

ответ

1

В прошивке 8 его лучше использовать keyboardFrameDidChange вместо UIKeyboardWillShowNotification

Добавить слушатель:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardFrameDidChange:) 
               name:UIKeyboardDidChangeFrameNotification object:nil]; 

Внедрить селектор:

-(void)keyboardFrameDidChange:(NSNotification*)notification{ 

NSDictionary* info = [notification userInfo]; 

CGRect kKeyBoardFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

[UIView animateWithDuration:0.25f delay:0 options:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue] animations:^{ 

    // Do your animation 
} completion:^(BOOL finished) { 

    [yourView layoutIfNeeded]; 
}]; 
} 
+0

Тот же результат! ! ! ! –

+0

@ Mc.Lover Вы используете Autolayout? Ваше мнение приковано к дну? – Sreejith

+0

Да, это поднимается! но, выбрав другое текстовое поле в webView, оно возвращается туда, где оно было! мой webview - контактная форма имеет другое текстовое поле –

1

Трудно отладить конкретную проблему с вашими представлениями, поскольку я не знаю, как настроены ваши ограничения. Вы действительно не должны выпускать вызов setFrame, особенно с фиксированными номерами для высоты и других значений!

Это уже указывал Sreejith, что вы можете получить размер клавиатуры так:

CGSize keyboardSize = [[[notif userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

Если вы не хотите, чтобы изменить ограничения непосредственно (не забывайте, что вы можете IBOutlet их и установить константу), вы можете попробовать изменяя край врезки с чем-то вроде этого:

self.scrollView.contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length, 0, self.view.height - keyboardSize.origin.y, 0);

время анимации также должны быть отбиты они информация клавиатуры:

NSTimeInterval animationDuration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];

Ссылки на демо-проект поможет многое в отладке, если эти предложения не работают.

0

я решил такую ​​же проблему с установкой autoresizingMask в WebView в

_webView.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
Смежные вопросы