2016-09-25 2 views
3

У меня есть подкласс UITableViewController, который отображает несколько строк (точнее, 8), где верхняя строка - это пользовательская ячейка, содержащая UITextField. Когда представление загружено, я сразу же вывожу клавиатуру, вызывая becomeFirstResponder по этому адресу textfield. Все это работало нормально, пока я не обновился с iOS 9 до iOS 10. Теперь представление переместится в нижнюю часть представления, при этом клавиатура закрывает мои последние две строки, а мой TextField находится за пределами видимой области. Когда я комментирую звонок becomeFirstResponder, прыжки уходят, но я теряю всплывающее окно клавиатуры, конечно. Это то, что мой код выглядит ...iOS 10 - UITableViewController прокручивается вниз при загрузке

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

... 

вещи я попытался:

  1. Вызов userInfoCell?.nameField.becomeFirstResponder() в viewWillAppear()
  2. Телефон: userInfoCell?.nameField.becomeFirstResponder() Факс: viewDidAppear()
  3. Вызов nameField.becomeFirstResponder() в UserInfoTableViewCell.awakeFromNib().
  4. Вызов tableView.scrollToRowAtIndexPath() после звонка на номер userInfoCell?.nameField.becomeFirstResponder().
  5. удаление super.viewWillAppear() в моей viewWillAppear()

Ни один из них работали для меня.

+0

попробовать это: 'пусть Cell = tableView.dequeueReusa .....'/'вернуться cell' –

+0

Спасибо за предложение, но, что не сделал сделайте это, к сожалению. Я получаю тот же свиток к нижней проблеме. – Coder1224

+0

Хммм, я пень переполнения стека? – Coder1224

ответ

0

откладывая becomeFirstResponder() решил вопрос для меня

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

Это сделало его, где экран остается наверху и для меня! Однако теперь, когда экран переходит к столу, появляется странное мерцание клавиатуры, после чего он исчезает, появляется другая клавиатура. Может быть, потому что его вызванный в делегат tableview так называется несколько раз ??? Я видел этот 'dispatch_async()' как решение для многих сообщений SO, но я стесняюсь создавать потоки как общее правило. Это все, что делает этот метод - создать поток, чтобы подождать, пока основной поток не будет готов к этому? – Coder1224

Смежные вопросы