私は現在、SwiftベースのiPhoneアプリでtextFieldの問題を扱っているキーボードと戦っています。テキストフィールドからテキストフィールドに直接移動するとUITableViewが移動しない
この画像は主要な問題を示す(トップ3の画像が異常を示したが、下の3つは、それがやるべきものです):tableViewCellでのテキストフィールドが編集され
は私が移動したいですテーブルビュー全体とナビゲーションバーを上にします。 ... ...
var tableViewShiftedUp = false
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! QuantityTableViewCell
let componentLocationQuantity = tableViewData[indexPath.row]
if let locationString = componentLocationQuantity.location.valueForKey("location_name") as? String {
cell.setCellContents(locationString, quantity: componentLocationQuantity.quantity.floatValue)
cell.quantityLabel.delegate = self
}
//get stock level related to current build rate and lead time (good - green, warning - orange, urgent - red)
let status = model.determineStockLevelStatus(component)
cell.setQuantityLabelBackgroundStatusColor(status)
if editingMode == true {
cell.makeQuantityEditable()
}
//add control event to detect text change
cell.quantityLabel.addTarget(self, action: #selector(quantityCellTextChanged(_:)), forControlEvents: UIControlEvents.EditingChanged)
cell.quantityLabel.addTarget(self, action: #selector(quantityCellSelected(_:)), forControlEvents: UIControlEvents.EditingDidBegin)
return cell
}
を
//MARK: - UITextfield delegate
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
if tableViewShiftedUp == true {
moveTable()
}
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func quantityCellSelected(textField: UITextField){
if tableViewShiftedUp == false {
moveTable()
}
//check table was moved
print(tableView.frame.origin.y)
}
func hideKeyboard(){
self.view.endEditing(true)
if tableViewShiftedUp == true {
moveTable()
}
}
func moveTable(){
if tableViewShiftedUp == true {
animateTableViewMoving(false, moveValue: 250)
animateNavigationBarMoving(false, moveValue: 250)
tableViewShiftedUp = false
} else {
animateTableViewMoving(true, moveValue: 250)
animateNavigationBarMoving(true, moveValue: 250)
tableViewShiftedUp = true
}
}
// moving the tableView
func animateTableViewMoving (up:Bool, moveValue :CGFloat){
let movementDuration:NSTimeInterval = 0.0
let movement:CGFloat = (up ? -moveValue : moveValue)
UIView.beginAnimations("animateView", context: nil)
UIView.setAnimationBeginsFromCurrentState(true)
UIView.setAnimationDuration(movementDuration)
self.tableView.frame = CGRectOffset(self.tableView.frame, 0, movement)
UIView.commitAnimations()
}
// moving the navigationBar
func animateNavigationBarMoving (up:Bool, moveValue :CGFloat){
let movementDuration:NSTimeInterval = 0.0
let movement:CGFloat = (up ? -moveValue : moveValue)
UIView.beginAnimations("animateView", context: nil)
UIView.setAnimationBeginsFromCurrentState(true)
UIView.setAnimationDuration(movementDuration)
self.midNavigationBar.frame = CGRectOffset(self.midNavigationBar.frame, 0, movement)
UIView.commitAnimations()
}
直接移動するときに、それが正常に動作します:私は(ViewControllerをから取ら抜粋)以下のコードでこれを行うことができますtableViewのtextFieldに渡します。しかし、私がすでにtableViewの外でtextFieldを編集しているときに、シフトアップは起こらないので、シフトトグルが同期しなくなります。
私はのtableViewフレームの原点を印刷しました:
//check table was moved
print(tableView.frame.origin.y)
ので、私はのtableViewがのtableView内部テキストフィールドへのtableView外テキストフィールドからその最初の移動にして上に設定されてものを見ることができ、このプロパティは何ですか私はそれが134になると期待しますが、次回に呼び出されたときに画面に表示される画面はまだ384です。
tableViewでセル内を移動しても問題は発生しません。
私は何らかの競合状態の問題を抱えているように感じます。または、あるセルから次のセルに移行するときにすべてをスローしている一部のデリゲートメソッドが不足しています。
ヘルプは素晴らしいでしょう。
おかげで、最後にIQKeyboardManagerと一緒に行った - 上記のコメントにライブラリ – SimonBarker
UPDATEを探すために考えていなかった:IQKeyboardManagerはかなり右働いていなかったので、TPKeyboardAvoidingを試してみましたが、それは完全にそれはあなたのために働いていた – SimonBarker
グラッドを働きました。何がIQKeyboardManagerで動作していませんでしたか?バグや機能不足はありましたか? – oyalhi