Table View (скроллинг к indexPath)[DONE]

swift3

#1

Всем доброго дня суток. Задача такая что нужно сделать автоскроллинг к определенному row. У меня TableView там указано время и если это время совпадает с currentTime нужно скролить до этого момента.
Я использую tableView.scrollToRowAtIndexPath, но я не могу определить какой именно мне нужен indexPath что бы скролить до этого момента, так как этот row не показывается пока я до него сам не доскролю. Пока не знаю что делать, и как лучше сделать. Пытаюсь сделать это целый день. Спасибо за помощь!


#2

Вы очевидно стоите таблицу на основе массива с ками-то значениями! у вас есть нужно значение, вам просто необходимо найти его индекс в этом массиве и скролить таблице до

    indexPath = IndexPath(section: 0, row: //тут индекс вашего элемента )

#3

Спасибо за отклик, да Den так и есть у меня есть массив с элементами, но я не знаю значение индекса до тех пор пока не доскролю до них, вот с этим не могу разобраться( Не знаю как узнать его indexPath.row


#4

Можешь!
IndexPath для таблицы состоит из двух частей: номер секции и номер ряда!
Номер секции если ты не указывал, по дефолту 0.
А номер ряда в таблице равен индексу нужного тебе элемента в массиве на основе которого ты строишь таблицу!
Тебе нужна функция(я за тебя код писать не буду, а только объясню!)

Функция проходит по всем элементам массива на основе которого ты строишь таблицу и сравнивает этот каждый элемент(а это у тебя дата) с текущей датой!и если они совпадают, то возвращает индекс этого элемента!
И вот тебе и останется проскролить таблицу до результата этой функции!
Понятно?


#5

да спасибо уловил идею, буду пробовать


#6

добрый день, пробую по вашему методу получаю нужную дату , но не могу вывести indexPath.row ,

  for item in timeArray {
    if item == hourCurrent {
    print(timeArray[indexPath.row])
    }
    }

timeArray[indexPath.row] - не выдает нужный indexPath

Не могли бы вы посмотреть что я не так делаю. Спасибо


#7

У массива нет indexPath. Вы должны получить порядковый номер вашего элемента в массиве, через метод enumerated к примеру


#8

Давайте с вами разберем что вы написали:

 //тут просто: для всех item в массиве timeArray
 for item in timeArray { 
    // если элемент item равен  hourCurrent то   
    if item == hourCurrent {
        // вы тут хотите вывести индекс элемента, но делаете непонятно что!
        print(timeArray[indexPath.row])
       // вот здесь вам нужно почитать как найти индекс элемента в массиве!
        let index = // то что вы прочитали и поняли

А вод дальше уже можно использовать tableView.scrollToRowAtIndexPath, так как вы уже можете посчитать индекс:


#9

спасибо я уже сделал, у меня получилось. Я пронумеровал все элементы массива, потом сравнил их и получил index.

 func getIndexFromArray() {

            for (index,item) in timeArray.enumerated() {
                if hourCurrent == item {
                print(index)
                }
            }
    }