1

UITableViewdidSelectRow メソッドを持つ があります... を作成してUIMenuController表示します。

現在、正しく動作しますが、UIMenuController が閉じたときに、 [tableView1 deselectRowAtIndexPath:path1 animated:YES];

NSIndexPath *path1;
UITableView *table1;
#pragma maek - Table View
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{


    path1 = indexPath;

    tablview1 = tableview;

        CGRect location = [tableView rectForRowAtIndexPath:indexPath];

    location.origin.y = location.origin.y+30;

    [self becomeFirstResponder];

    UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"View Item" action:@selector(viewItem:)];
    UIMenuItem *menuItem1 = [[UIMenuItem alloc] initWithTitle:@"Edit Item" action:@selector(editItem:)];
    UIMenuItem *menuItem3 = [[UIMenuItem alloc] initWithTitle:@"Cancel" action:@selector(cancelSubMenu:)];

    UIMenuController *menuController = [UIMenuController sharedMenuController];
    [menuController setTargetRect:location inView:self.view];
    menuController.menuItems = [NSArray arrayWithObjects:menuItem, menuItem1,menuItem3, nil];

    menuController.arrowDirection = UIMenuControllerArrowUp;

    [menuController setMenuVisible:YES animated:YES];
}

-(IBAction)cancelSubMenu:(id)sender 
{
    [tableView1 deselectRowAtIndexPath:path1 animated:YES]; 
}

-(BOOL)canBecomeFirstResponder 
{
    return YES; 
}

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{
    if(action == @selector(viewItem:)){return YES;}
    if(action == @selector(editItem:)){return YES;}
    if(action == @selector(cancelSubMenu:)){return YES;}

    return NO; 
}

ユーザーが行のキャンセル ボタンをタップすると、UIMenuController適切に選択が解除されます。ただし、ユーザーが画面の他の場所をタップすると、画面は消えますUIMenuControlllerが、行はまだ選択されています。

ある種の didDismissUIMenuControllerメソッドはありますか?

4

1 に答える 1

3

は、呼び出しがUIMenuController非表示になった直後に通知を投稿します。この通知をサブスクライブして、テーブルビューUIMenuControllerDidHideMenuNotificationを呼び出すメソッドを呼び出すことができます。deselectRowAtIndexPath例えば:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourMethodHere) name:UIMenuControllerDidHideMenuNotification object:nil];

そしてSwift5では:

NotificationCenter.default.addObserver(self,
                                       selector: #selector(self.receiveNotification(_:)),
                                       name: UIMenuController.didShowMenuNotification,
                                       object: nil)

そして通知を処理するには:

@objc func receiveNotification(_ notification: Notification) {
    // do something here
}
于 2013-01-30T23:18:18.227 に答える