я пытаюсь использовать UIMenuController для выполнения пользовательского действия в ячейке таблицы, из которой UIMenuController запускается долгим нажатием.
Я зарегистрировал UILongPressGestureRecognizer в методе viewDidLoad в моем подклассе UITableViewController и добавил пользовательский элемент с помощью @selector(handleMyAction).
- (void)viewDidLoad
{
[super viewDidLoad];
[self.refreshControl addTarget:self action:@selector(refreshView:) forControlEvents:UIControlEventValueChanged];
UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
longPressGesture.minimumPressDuration = .5;
longPressGesture.delegate = self;
[self.tableView addGestureRecognizer:longPressGesture];
}
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
if(gestureRecognizer.state == UIGestureRecognizerStateBegan)
{
CGPoint point = [gestureRecognizer locationInView:self.tableView];
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint:point];
if(indexPath == nil) return ;
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
UIMenuItem *it = [[UIMenuItem alloc] initWithTitle:@"My Action on this cell" action:@selector(handleMyAction:)];
UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setMenuItems:[NSArray arrayWithObjects:it, nil]];
[menu setTargetRect:cell.frame inView:cell.superview];
[menu setMenuVisible:YES animated:YES];
[self becomeFirstResponder];
}
}
Я также переопределяю
- (BOOL)canBecomeFirstResponder{
return YES;
}
Когда я нажимаю на одну ячейку, контекстное меню с пользовательской записью отображается правильно. НО, проблема в том, как я могу реализовать метод для обработки настраиваемого действия, которое должно быть выполнено в выбранной ячейке.
- (void)handleMyAction:(id)sender
{
NSLog(@"Action triggered, however need some way to refer the tapped cell");
}
Поскольку единственная информация, которую я могу получить в этом методе, - это отправитель, который является самим UIMenuController, но я понятия не имею, как получить ячейку, в которой сработало меню, поэтому я могу выполнить дальнейшие действия относительно самой ячейки.
Может ли кто-нибудь помочь мне в этом?
Спасибо. Хай