ios - 通过 UIMenuController 的 UIMenuItem 传值

标签 ios objective-c uimenucontroller

我正在使用以下方法在 UITableViewCell 中长按显示菜单。

我需要将按下 Delete 菜单项的值传递给 -(void)numberDelete 方法。

-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer {

    if(gestureRecognizer.state == UIGestureRecognizerStateBegan) {

        CGPoint p = [gestureRecognizer locationInView: self.pullTableView];
        NSIndexPath *indexPath = [self.pullTableView indexPathForRowAtPoint:p];
        if(indexPath != nil) {

            [self becomeFirstResponder];
            NSInteger *row = indexPath.row;

            //need to pass this row value through @selector(numberDelete:)

            UIMenuItem *delete = [[UIMenuItem alloc] initWithTitle:@"Delete" action:@selector(numberDelete:)];

            UIMenuController *menu = [UIMenuController sharedMenuController];
            [menu setMenuItems:[NSArray arrayWithObjects:delete, nil]];
            [menu setTargetRect:[self.pullTableView rectForRowAtIndexPath:indexPath] inView:self.pullTableView];
            [menu setMenuVisible:YES animated:YES];
        }

    }

}

-(void)numberDelete:(id)sender {
   //receive value of row here
}

-(BOOL)canBecomeFirstResponder {
    return YES;
}

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

最佳答案

非常简单,只需创建一个 UIMenuItem 类型的类,在其中添加属性,然后使用您的 UIMenuItem 类 而不是实际的 UIMenuItem。看看如何。

创建一个 type UIMenuItem 的类 say MyMenuItem

MyMenuItem.h

#import <UIKit/UIKit.h>

@interface MyMenuItem : UIMenuItem
@property(nonatomic, strong)NSIndexPath *indexPath;
@end

MyMenuItem.m

#import "MyMenuItem.h"

@implementation MyMenuItem

@end

然后

{
    MyMenuItem *deleteMenuItem = [[MyMenuItem alloc] initWithTitle:@"Delete" action:@selector(numberDelete:)];
    deleteMenuItem.indexPath=indexPath;//Assign to property

    UIMenuController *menu = [UIMenuController sharedMenuController];
    [menu setMenuItems:[NSArray arrayWithObjects:deleteMenuItem, nil]];
    [menu setTargetRect:[self.pullTableView rectForRowAtIndexPath:indexPath] inView:self.pullTableView];
    [menu setMenuVisible:YES animated:YES];
}



-(void)numberDelete:(id)sender {
   //receive value of row here. The sender in iOS 7 is an instance of UIMenuController.
   UIMenuController *targetSender = (UIMenuController *)sender ;
   MyMenuItem *menuItem=(MyMenuItem *)[targetSender.menuItems firstObject]; 

   NSLog(@"%d",menuItem.indexPath.row); 
}

希望对你有帮助。

干杯。

关于ios - 通过 UIMenuController 的 UIMenuItem 传值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24729707/

相关文章:

ios - 是否可以从 CLI 命令应用 "Update to recommended settings"?

ios - 如何用命令录屏iOS真机?

ios - 自定义 UITableViewCell 图层截断

iphone - 自定义 UIMenuController

ios 7 - 自定义 UIMenuItem 不适用于 TableViewCell

iphone - 为什么 UIMenuItem Action 的发送者总是 nil?

objective-c - Protobuf 与二进制 plist 在 iOS 游戏中的网络交易

ios - PopOver View Controller 覆盖全屏

ios - 如何从我的自定义 UIActivity 类发送电子邮件?

ios - 如何使另一个对象与重复动画同步?