Прокрутка содержимого до строки в пути индекса за пределами облигаций?

Таким образом, я смог анимировать выноску аннотации, когда выбранная ячейка таблицы была выбрана таким образом. Довольно просто благодаря indexPath.

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let indexPath = indexPath.row
    myMap.selectAnnotation(pinArray[indexPath] , animated: true)
}

Однако я не понимаю, как этого добиться, когда я выбираю аннотацию и хочу, чтобы ячейка таблицы загоралась. Я пытался установить var в indexPath, но поскольку аннотация не имеет нижнего индекса, я не могу это сделать. Следовательно, как я могу выполнить аннотацию к логике выбранной ячейки?

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    //Magic
}

Обновление - в настоящее время код, который я должен выделить ячейку таблицы, связанную с аннотацией карты, таков.

  func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

    let index = pinArray.index(of: view.annotation as! AnnotationPin)

    let indexPath = IndexPath(row: index!, section: 0)

    myTable.selectRow(at: indexPath, animated: true, scrollPosition: .top)

}

К сожалению, я получаю это сообщение об ошибке, когда нажимаю на аннотацию карты.

-[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:usingPresentationValues:]: строка (72) выходит за границы (17) для раздела (0).

Я не понимаю, поскольку в массиве всего 12 записей, поэтому я совершенно не понимаю, как можно указать, что строка выше 15 выходит за рамки.


person Jonathan Gardocki    schedule 30.06.2018    source источник
comment
Какие элементы находятся внутри pinArray?   -  person Kamran    schedule 30.06.2018
comment
MKАннотации, используемые на карте   -  person Jonathan Gardocki    schedule 30.06.2018


Ответы (1)


  1. Получить индекс pinArray из выбранной аннотации
  2. Сделать IndexPath
  3. Выберите строку TableView

e.g.

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    // Get index of pinArray
    let index = pinArray.index{$0 === view.annotation}

    // Make IndexPath
    let indexPath = IndexPath(row: index, section: 0)

    // Select row of TableView
    tableView.selectRow(at: indexpath, animated: true, scrollPosition: .bottom)
}
person Kosuke Ogawa    schedule 30.06.2018
comment
Практически идеально. Однако, в зависимости от того, какую аннотацию я выберу, программа вылетит, и xcode скажет, что выбранный индекс выходит за рамки. чего я не понимаю. - person Jonathan Gardocki; 30.06.2018
comment
Вы должны проверить, существует ли «IndexPath». См. также stackoverflow.com/a/43618106/1155354. - person Kosuke Ogawa; 01.07.2018