2016-08-04 11 views
7

В настоящее время я работаю с видом контейнера со встроенным UITableView, и я с помощью IQKeyboardManager CocoaPod прокрутить вид так что мой UITextFields и UITextViews не охвачены клавиатурами.IQKeyboardManager не работает, когда UITableView встраивают в контейнере

Я могу успешно выполнить import IQkeyboardManager и заставить его работать с другими видами, но он не работает, когда UITableView встроен в вид контейнера.

+0

Я уточнил ваш вопрос, но до сих пор не хватает информации. Покажите весь код класса, который это делает. – BaseZen

ответ

4
-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES]; // This line is needed for the 'auto slide up' 
    // Do other stuff 
} 

Простое решение, не нужно создавать наблюдателя.

+0

Отлично! , спас мой день! –

+0

Спасибо, я тоже сейчас это использую. Из любопытства - это работает, потому что он гарантирует, что классы IQKeyboardManager выполняются до тех, что находятся в диспетчере представлений? – SMSidat

+0

Так много хлопот для одной строки кода, я потратил не менее 4 часов, пока не выяснил, что это было то, чего мне не хватало. Большое спасибо! –

-1

пытаются прокручивать все свое мнение

в viewDidLoad

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourVC.keyboardWillShow(_:)), name:UIKeyboardWillShowNotification, object: nil) 
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourVC.keyboardWillHide(_:)), name:UIKeyboardWillHideNotification, object: nil) 

и после

func keyboardWillShow(notification:NSNotification) 
    { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() 
     { 
      self.view.frame.origin.y -= keyboardSize.height 
     } 
    } 

    func keyboardWillHide(notification:NSNotification) 
    { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() 
     { 
      self.view.frame.origin.y += keyboardSize.height 
     } 
    } 

вы можете изменить keyboardSize

+0

Вы неправильно поняли вопрос. Он использует CocoaPod для обработки прокрутки, и это не весь вид, который должен двигаться здесь - просмотр таблицы должен прокручиваться. – BaseZen

3

У меня была аналогичная проблема, и установил ее используя предоставленную информацию here от автора библиотеки у.

Ключевая фраза:

библиотека логика, чтобы найти ближайший Scrollview от TextField. и в вашем случае это tableView, поэтому библиотека выбирает tableView для прокрутки.

Таким образом, решение, которое я использовал, заключается в отключении свойства прокрутки UITableView при редактировании текстового поля/вида (использование методов делегата), а затем повторного включения его после завершения редактирования. Это гарантирует, что библиотека не обнаруживает UITableView как прокручиваемую, и поэтому она игнорирует ее, а затем вместо этого перемещает ваш контейнерный вид - как вы и предполагали. После того, как представление переместилось вверх по вашему желанию, вы можете снова включить прокрутку через UIKeyboardWillShowNotification.

Так, например, для UITextField:

-(void) textFieldDidBeginEditing:(UITextField *)textField { 
    [self.tableView setScrollEnabled:NO]; 
} 

- (void) textFieldDidEndEditing:(UITextField *)textField { 
    [self.tableView setScrollEnabled:YES]; 
} 

Однако до сих пор позволяет прокрутку после вида переместился, я зарегистрировался для уведомления клавиатуры, а затем дает прокрутку раз клавиатура вверх:

-(void) keyboardWillShow { 
    [self.tableView setScrollEnabled:YES]; 
} 


- (void)viewDidLoad { 
    [super viewDidLoad]; 

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

} 
+0

Ваше решение кажется очень логичным, но оно не работает для меня, даже если я делаю tableview не прокручиваемым в viewDidLoad() .. у вас есть идеи, почему это происходит? – Arek