Используя UICollectionView или UITableView.
Для UICollectionView:
UICollectionViewDelegate.collectionView(_:didSelectItemAt:) получить indexPath.item (индекс колонки в секции).indexPath.item + 1 или заданный индекс).collectionView.cellForItem(at: IndexPath(item: другой_индекс, section: indexPath.section)).swift
Для UITableView с несколькими секциями, каждая представляющая блок, и ячейками в секции, представляющими колонки:
UITableViewDelegate.tableView(_:didSelectRowAt:) получить indexPath.row (индекс колонки в блоке) и indexPath.section (индекс блока).indexPath.row + 1) в том же или другом блоке.tableView.cellForRow(at: IndexPath(row: другой_индекс_колонки, section: другой_индекс_блока)).swift
Важные нюансы:
collectionView(_:cellForItemAt:) или tableView(_:cellForRowAt:).contentView.backgroundColor).UICollectionView с настройками для горизонтального скролла (или UIStackView внутри UITableViewCell) может быть более подходящим архитектурным решением, представляя колонки как элементы внутри ячеек.UITableView с 5 секциями, каждая из которых содержит 10 ячеек, тоже является рабочим вариантом.UIStackView внутри ячейки UITableViewCell или UICollectionViewCell может представлять 10 колонок, и при тапе на один из subviews (представляющий колонку), можно определить его индекс и изменить цвет другого subview. Для определения тапа на subview в UIStackView можно использовать UITapGestureRecognizer.swift