Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIMenuItem在切换到其他选项卡后不显示_Ios_Uitabbar_Uimenuitem - Fatal编程技术网

Ios UIMenuItem在切换到其他选项卡后不显示

Ios UIMenuItem在切换到其他选项卡后不显示,ios,uitabbar,uimenuitem,Ios,Uitabbar,Uimenuitem,我已经实现了一个UIMenuItem,通过长按TableViewController上的一个项来显示,该项是UITabBarController的一个元素。 我是这样做的 - (void)viewDidLoad { resendMenuItem = [[UIMenuItem alloc] initWithTitle:@"Kirim Ulang" action:@selector(resend:)]; [[UIMenuController sharedMenuController]

我已经实现了一个UIMenuItem,通过长按TableViewController上的一个项来显示,该项是UITabBarController的一个元素。 我是这样做的

- (void)viewDidLoad
{
    resendMenuItem = [[UIMenuItem alloc] initWithTitle:@"Kirim Ulang" action:@selector(resend:)];
    [[UIMenuController sharedMenuController] setMenuItems: @[resendMenuItem]];
    [[UIMenuController sharedMenuController] update];

} 

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

-(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    selectedIndex = indexPath.row;
    return (action == @selector(resend:));
}

- (BOOL)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    selectedIndex = indexPath.row;
    return YES;
}


-(BOOL) canPerformAction:(SEL)action withSender:(id)sender {
    return (action == @selector(resend:));
}

-(BOOL)canBecomeFirstResponder {
    return YES;
}

/// this methods will be called for the cell menu items
-(void) resend: (id) sender
{
 // do something
}

最初,菜单显示良好。但是,在切换到UITableViewController中的其他选项卡,然后再次切换回UITableViewController后,如果我长按该菜单,该菜单将不显示。为什么?我也有同样的问题。在中找到解决方案:您必须在UITableViewController的视图中调用becomeFirstResponder。

您应该实现以下方法:

斯威夫特:

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    viewController.becomeFirstResponder()
}
目标C:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    [viewController becomeFirstResponder];
}

如果将代码从viewDidLoad移动到ViewDidDisplay,会发生什么情况?我猜当您切换选项卡时,有些东西会被打断,并且由于viewcontroller已加载,您的UIMenuController不希望显示。我仍在等待其他答案。。