2016-08-04 8 views
7

の場合、IQKeyboardManagerは機能しません現在、私はUITextFieldsUITextViewsがキーボードでカバーされないように、IQKeyboardManager CocoaPodを使用してビューをスクロールしています。コンテナビューに埋め込まれたUITableViewが

私は正常にimport IQkeyboardManagerを実行し、他のビューでも動作させることができますが、UITableViewがコンテナビューに埋め込まれていると動作しません。

+0

私はあなたの質問を明確にしましたが、助けになるほどの情報がまだありません。これを行うクラスのコード全体を表示します。 – BaseZen

答えて

4

シンプルなソリューションで、オブザーバを作成する必要はありません。

+0

素晴らしい!私の日を救った! –

+0

ありがとうございます - 私もこれを使っています。これは、IQKeyboardManagerクラスがviewcontroller内のクラスの前に実行されることを保証するためです。 – SMSidat

+0

コードの1行で面倒なので、私は行方不明だったことが分かるまで少なくとも4時間を過ごしました。どうもありがとう! –

-1

試みは、私は同様の問題を持っていたし、それを修正したあなたはkeyboardSize

+0

あなたはその質問を誤解しました。彼はスクロールを処理するためにCocoaPodを使用しています。ここで移動すべき全体のビューではありません。テーブルビューはスクロールする必要があります。 – BaseZen

3

を変更することができます

の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 
     } 
    } 

後に、すべてのビューをスクロールします図書館の著者から与えられたhereの情報を使用してy。

キー文は次のとおりです。

ライブラリ・ロジックは、TextFieldから最も近いscrollViewを見つけることです。あなたの場合はtableViewです。そのため、libraryは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

あなたのソリューションは非常に論理的だと思われますが、viewDidLoad()でテーブルビューをスクロールできなくても、私にとってはうまくいきません。 – Arek

関連する問題