【问题标题】:UIMenuController didDismiss Method?UIMenuController didDismiss 方法?
【发布时间】:2013-01-30 15:32:54
【问题描述】:

我有一个 UITableView 有一个 didSelectRow 方法...它创建一个 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 会关闭,但该行仍处于选中状态。

是否有某种 didDismiss UIMenuController 方法?

【问题讨论】:

    标签: ios4 uitableview ios5 uimenucontroller


    【解决方案1】:

    UIMenuController 将在它隐藏后发布一个名为UIMenuControllerDidHideMenuNotification 的通知,您可以订阅此通知以调用一个方法,该方法反过来在您的表格视图上调用deselectRowAtIndexPath。例如:

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

    在 Swift 5 中:

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

    并处理通知:

    @objc func receiveNotification(_ notification: Notification) {
        // do something here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多