IOS开发 Tableview长按弹出菜单,类似android的popwindow

viewDidLoad方法中添加如下代码:

//给列表添加长按手势

    UILongPressGestureRecognizer *lpress = [[UILongPressGestureRecognizer allocinitWithTarget:self action:@selector(longPress:)];

    lpress.minimumPressDuration = 1;

    lpress.delegate = self;

    [self.tableViews addGestureRecognizer:lpress];//tableViews是uitableview的变量

    [lpress release];

要实现@selector(longPress:)中的longPress方法当然方法名自定义即可

//长按列表项弹出菜单

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

    

    CGPoint location = [gestureRecognizer locationInView:tableViews];//用来确定长按列表项时鼠标的位置

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan){

        UIMenuController *menuController = [UIMenuController sharedMenuController];

        //menu1、menu2、menu3、menu4必须要实现,否则也会出现无法显示对应的item的情况

        UIMenuItem *menuItem1 = [[UIMenuItem allocinitWithTitle:@"菜单1" action:@selector(menu1)];

        UIMenuItem *menuItem2 = [[UIMenuItem allocinitWithTitle:@"菜单2" action:@selector(menu2)];

        UIMenuItem *menuItem3 = [[UIMenuItem allocinitWithTitle:@"菜单3" action:@selector(menu3)];

        UIMenuItem *menuItem4 = [[UIMenuItem allocinitWithTitle:@"菜单4" action:@selector(menu4)];

        ListCell *cell = (ListCell *)gestureRecognizer.view;//你tableview的cell

        

        [cell becomeFirstResponder];

        [menuController setMenuItems:[NSArray arrayWithObjects:menuItem1,menuItem2,menuItem3,menuItem4,nil]];

         [menuController setTargetRect:CGRectMake(location.xlocation.y,  5050inView:tableViews];//location.x, location.y分别为长按那点的xy坐标    tableViews为将要展示弹出框的视图

        [menuController setMenuVisible:YES animated:YES];

        [menuItem1 release];

        [menuItem2 release];

        [menuItem3 release];

        [menuItem4 release];

        

    }


}

实现了这些代码,菜单还不会弹出,这个纠结了我好长时间。。

//确保UIMenuItem可以弹出,必须重写该方法,返回yes,否则菜单不显示

-(BOOL) canBecomeFirstResponder{

    return YES;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值