Обнаружение индекса элемента CustomCell, нажатого на TableViewController

У меня есть пользовательская ячейка, в которой есть два текстовых поля и одна метка. Я добавил TapGestuRecognizer для захвата события касания пользователя на этикетке. Однако мне интересно, как я могу определить индекс CustomCell, где выбрана метка?

var tapGesture = new UITapGestureRecognizer (Tap);
myLabel.AddGestureRecognizer (tapGesture);
myLabel.UserInteractionEnabled = true;

public void Tap(UITapGestureRecognizer r) 
{
    var vc = new myViewController (this);
    var nc = new NavigationController (vc);
    nc.PreferredContentSize = new System.Drawing.SizeF (200, 300);
    popupoverController = new UIPopoverController (nc);
    popupoverController.PresentFromRect (myLabel.Bounds, myLabel, UIPopoverArrowDirection.Any, true);
}

person casillas    schedule 02.12.2015    source источник
comment
stackoverflow.com/a/13723853/826716   -  person bteapot    schedule 03.12.2015


Ответы (2)


Если распознаватель жестов принадлежит ячейке табличного представления, добавьте свойство indexPath в подкласс ячейки табличного представления:

@property (nonatomic, strong) NSIndexPath *indexPath;

затем установите его в методе cellForRowAtIndexPath: перед возвратом ячейки.

Затем обработайте прикосновение в классе ячеек табличного представления на основе свойства self.indexPath.

Таким же образом вы также можете добавить указатель на «родительский» контроллер представления таблицы (на этот раз weak, чтобы не создавать циклические ссылки), после чего вы можете получить доступ к его общедоступным свойствам, таким как массив, который вы заполняете. с участием.

person Cyrille    schedule 02.12.2015

Преобразуйте точку касания (или CGPointZero, это не имеет значения) из вашей метки (вы можете получить ее из своего распознавателя касаний - у него есть свойство view) в координаты табличного представления с помощью

func convertPoint(_ point: CGPoint, toView view: UIView?) -> CGPoint

В качестве альтернативы вы можете использовать для этого метод UITapGestureRecognizer.

func locationInView(_ view: UIView?) -> CGPoint

И затем найдите indexPath ячейки в этой точке

func indexPathForRowAtPoint(_ point: CGPoint) -> NSIndexPath?

Документы: Преобразование между системами координат вида.

person grandboum    schedule 02.12.2015