2016-09-25 2 views
3

サブクラスがUITableViewControllerで、いくつかの行が表示されます(正確には8)。最上部の行はUITextFieldを含むカスタムセルです。ビューがロードされると、すぐにtextfieldbecomeFirstResponderを呼び出して、キーボードポップアップを表示します。これは、私がiOS 9からiOS 10にアップグレードするまでうまくいった。ビューは最後の2行をカバーするキーボードでビューの一番下に移動し、TextFieldは可視領域から外れています。 becomeFirstResponderコールをコメントアウトすると、飛び降りてしまいますが、私はもちろんキーボードポップアップを失います。でuserInfoCell?.nameField.becomeFirstResponder()を呼び出すiOS 10 - ロード時にUITableViewControllerが下にスクロールする

  1. :これは...私のコードがどのように見えるか

    class UserProfileTableViewController: UITableViewController { 
    
        private var userInfoCell: UserInfoTableViewCell? 
        ... 
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    
        if indexPath.section == 0 { 
        userInfoCell = tableView.dequeueReusableCellWithIdentifier("userInfoCell", forIndexPath: indexPath) as? UserInfoTableViewCell 
    
        if !editMode { 
         userInfoCell?.nameField.becomeFirstResponder() 
        } 
    
        return userInfoCell! 
        } 
        else if indexPath.section == 1 { 
        .... 
    

    ですその後、私のカスタムテーブルビューセルが...このように、私が試してみました

    class UserInfoTableViewCell: UITableViewCell, UITextFieldDelegate,, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    
    @IBOutlet weak var nameField: UITextField! 
    @IBOutlet weak var photoImageView: UIImageView! 
    ... 
    
    override func awakeFromNib() { 
        super.awakeFromNib() 
        // listen for when user touches a textfield 
        nameField.delegate = self 
        ... 
    } 
    
    override func setSelected(selected: Bool, animated: Bool) { 
        super.setSelected(selected, animated: animated) 
    } 
    
    ... 
    

    物事を探しますviewWillAppear()

  2. userInfoCell?.nameField.becomeFirstResponder()viewDidAppear()
  3. UserInfoTableViewCell.awakeFromNib()nameField.becomeFirstResponder()を呼び出します。
  4. userInfoCell?.nameField.becomeFirstResponder()の呼び出し後にtableView.scrollToRowAtIndexPath()を呼び出します。これらの私のviewWillAppear()

なしで取り外す

  • super.viewWillAppear()は私のために働いています。 becomeFirstResponderを()延期

  • +0

    はこれを試して私のために問題を解く: '聞かせてセル= tableView.dequeueReusa .....'提案を/ 'リターンcell'に –

    +0

    おかげでそれはしませんでした残念なことに、それを行う。私は下の問題に同じスクロールを取得します。 – Coder1224

    +0

    うーん、私はスタックオーバーフローを切り詰めましたか? – Coder1224

    答えて

    0

    dispatch_async(dispatch_get_main_queue(), { 
        userInfoCell?.nameField.becomeFirstResponder() 
    }) 
    
    +0

    それは画面が私のために一番上にとどまるところにそれを作った!しかし、画面がテーブルにぶつかると、キーボードの奇妙なちらつきがあり、それが消えて別のキーボードが現れます。たぶん、そのテーブルビューのデリゲートで呼び出されたので、複数回呼ばれます??? 私はこの 'dispatch_async()'を多くのSO投稿の解決策として見ましたが、一般的なルールとしてスレッドを作成することを躊躇します。そのすべてのメソッドは、メインスレッドが準備が整うまで待機するスレッドを作成しますか? – Coder1224

    関連する問題