Ответ 1
Пришлось сделать это недавно. Вам нужно использовать [tableView rectForRowAtIndexPath]
.
Однако одна из вещей, которые могут вас поймать, заключается в том, что при прокрутке UITableView вам нужно учитывать смещение (то есть, что-то, сообщающее о своей позиции в виде 3000 пикселей, конечно, означает 3000 от вершины UITableView - не 3000 пикселей на экране).
В дополнение к этому он, естественно, появится в верхней части ячейки, поэтому вам нужно добавить половину высоты ячейки в вычисления.
Этот код работал хорошо для меня:
CGRect frame = [tableView rectForRowAtIndexPath:indexPath];
CGPoint yOffset = self.tableView.contentOffset;
[self.popoverController presentPopoverFromRect:CGRectMake(frame.origin.x, (frame.origin.y + 45 - yOffset.y), frame.size.width, frame.size.height)
В моем случае каждая ячейка была высотой 90 пикселей, поэтому бит +45. Замените половину своей высоты ячейки.