当UITableView嵌入容器视图时,IQKeyboardManager无法工作

Kus*_*yar 10 uitableview ios uicontainerview swift iqkeyboardmanager

目前,我用了嵌入式的容器视图中工作UITableView,并正在使用IQKeyboardManagerCocoaPod滚动视图,所以我UITextFields并UITextViews没有涵盖的键盘.

我可以成功地import IQkeyboardManager使其在其他视图中工作,但是当UITableView它嵌入容器视图时它不起作用.

SMS*_*dat 9

我有一个类似的问题,并使用此处从库的作者给出的信息修复它.

关键声明是:

库逻辑是从textField中查找最近的scrollView.在你的情况下它是tableView,这就是为什么库选择tableView滚动.

所以我使用的解决方案是在编辑文本字段/视图时禁用UITableView滚动属性(使用委托方法),然后在编辑完成后重新启用它.这可以确保库不会将UITableView检测为可滚动,因此它会忽略它,然后移动容器视图 - 如您所愿.一旦视图按照您的意愿向上移动,您就可以通过UIKeyboardWillShowNotification重新启用滚动.

例如,对于UITextField:

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

- (void) textFieldDidEndEditing:(UITextField *)textField {
  [self.tableView setScrollEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)

但是,为了在视图向上移动后仍然允许滚动,我已经注册了键盘通知,然后在键盘启动后允许滚动:

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


- (void)viewDidLoad {
    [super viewDidLoad];

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

}
Run Code Online (Sandbox Code Playgroud)


viv*_*vat 8

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

简单的解决方案,无需创建观察者.

  • 我用最新的IQKeyboardManagerSwift(4.0.10)尝试了这个解决方案,它没有用. (4认同)