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