Отображение меню при длительном нажатии на UIView в UITableViewCell - PullRequest
0 голосов
/ 01 июня 2018

В приложении IOS я хочу отображать UIMenuController при длительном нажатии UIView, расположенного в UITableViewCell.

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    myTableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell==nil)
    {
        cell=(myTableViewCell*)[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    myView=<initMyView>
    [cell.contentView addSubview:myView];
    UILongPressGestureRecognizer *longTap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longTapGestureCapturedOnView:)];
    longTap.minimumPressDuration=0.5f;
    [myView addGestureRecognizer:longTap];

    return cell;
}

- (void)longTapGestureCapturedOnView:(UITapGestureRecognizer *)gesture
{
    items=[[NSMutableArray alloc]init];
    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        [items addObject:[[UIMenuItem alloc] initWithTitle:@"Copy" action:@selector(myCopy:)]];
        [items addObject:[[UIMenuItem alloc] initWithTitle:@"Custom" action:@selector(myCustom:)]];
    }

    [[UIMenuController sharedMenuController] setMenuItems:items];
    [[UIMenuController sharedMenuController] update];
    [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    BOOL result = NO;
    if(@selector(myCopy:) == action ||@selector(myCustom:) == action ) {
        result = YES;
    }
    return result;
}

Вызывается longTapGestureCapturedOnView, а также canPerformAction, который возвращает YES в2 случая, но пункт меню не появляется на экране.Что я мог сделать не так?

1 Ответ

0 голосов
/ 02 июня 2018

Вам также нужно

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath {
   return YES ;
}

//

, также неправильно добавлять жесты в cellForRowAt, так как он вызывается при прокрутке и cellReusing, поэтому добавьте его в метод awakeFormNibUITableViewCell пользовательский класс

...