UIMenuItem не появляется после перехода на другую вкладку

Я реализовал 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
}

Изначально меню выглядит хорошо. Однако после переключения на другую вкладку в UITabBarController, а затем снова переключиться на UITableViewController, меню перестает отображаться, если я долго нажимаю на него. Зачем?

2 ответа

У меня такая же проблема. Найденное решение в этом ответе: Вы должны вызвать in toFirstResponder в viewDidAppear вашего UITableViewController.

Вы должны реализовать следующее UITabBarControllerDelegate метод:

Swift:

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

Objective-C:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    [viewController becomeFirstResponder];
}
Другие вопросы по тегам