2015-09-21 5 views
1

Возможно, это неправильный способ сделать это, поэтому, пожалуйста, покажите мне правильный путь, если это неправильно. У меня есть табличное представление на scrollview. В большинстве ячеек есть TextField, который на экране показывает клавиатуру. Проблема, с которой я сталкиваюсь, заключается в том, что ячейки в нижней части прокрутки в конечном итоге застревают за клавиатурой.Swift: TableView прокрутите до позиции

// I build the tableView 
self.shippingTableView = UITableView(frame: CGRectMake(0, 5, self.view.frame.width, CGFloat(tableViewHeight))) 
self.shippingTableView.delegate = self 
self.shippingTableView.dataSource = self 
self.shippingTableView.scrollEnabled = true 
self.scrollView.addSubview(self.shippingTableView) 

// Create some delegate methods 
// I know i'm not reusing cells yet but will update later. 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = UITableViewCell() 
    cell.accessoryType = UITableViewCellAccessoryType.None 

    let textField = UITextField(frame: CGRectMake(10, 0, cell.frame.width, cell.frame.height)) 
    textField.delegate = self 
    cell.contentView.addSubview(textField) 
    return cell 
} 

Теперь из приведенного выше кода у меня есть мнение на странице, и если я выбрать элемент, шоу клавиатуры, но с клеткой позади. Я создал свой метод делегирования и попробовал следующее. Я добавил линию печати к этому методу, поэтому я знаю, что он вызван.

func textFieldDidBeginEditing(textField: UITextField) { 
    let indexPath = NSIndexPath(forItem: textField.tag, inSection: 0) 

    // I tried each of the following separatly, but nothing moves. 
    self.shippingTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true) 
    self.shippingTableView.scrollToNearestSelectedRowAtScrollPosition(UITableViewScrollPosition.Middle, animated: true) 
} 

Я догадался, что проблема была, потому что у меня была Tableview внутри Scrollview, но я попытался изменить это просто стандартный вид и была такая же проблема.

Несомненно, правильный ответ заключается не в том, чтобы прокручивать вручную?

+0

Простейший способ достичь этого (если это возможно), сделать ваш контроллер подклассом 'UITableViewController', поскольку это позволяет избежать встроенной клавиатуры. –

ответ

3

Не добавляйте UITableView в UIScrollView. Загрузите TPKeyboardAvoiding make TPKeyboardAvoidingTableView как суперкласс tableview. И вам не нужно беспокоиться о просмотре таблицы прокрутки вручную, TPKeyboard будет обрабатывать автоматически.

+0

Спасибо, это отличная библиотека. Нет необходимости в этом. –

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