自定义UIMenuController(以UITabelViewCell为实例)

本文介绍了如何自定义UIMenuController,特别是在UITableViewCell中使用。内容包括设置长按手势识别器,实现成为First Responder,添加UIMenuItem,定位及展示Menu,并提供了示例代码展示了三个自定义操作:Flag、Approve和Deny。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


UIMenuController使用要点:

1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES

2. Menu所处的View必须实现 – (BOOL)canPerformAction:withSender,并根据需求返回YES或NO

3. 使Menu所处的View成为First Responder (becomeFirstResponder)

4. 实现UIMenuItem相应的使用方法

5. 定位Menu (- setTargetRect:inView:)

6. 展示Menu (- setMenuVisible:animated:)


首先给需要显示UIMenuController的对象(这里是cell)添加了长按事件,在初始化方法中添加即可。若对象本身长按时存在系统的UIMenuController(如UITextFiled\ UITextView\ UIWebView),即本身含有长按方法,那么只需在初始化方法中添加需要的UIMenuItem即可,无需添加长按方法。

UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longPress:)];

    [cell addGestureRecognizer:recognizer];

好,事件加上了,剩下的点击就是实现自定义剪贴板了,上代码:

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

       if (recognizer.state ==UIGestureRecognizerStateBegan) {

             CopyCell *cell = (CopyCell *)recognizer.view;

             [cell becomeFirstResponder];

            UIMenuItem *item1 = [[UIMenuItemalloc]initWithTitle:@"Flag"action:@selector(one:)];

            UIMenuItem *item2 = [[UIMenuItemalloc]initWithTitle:@"Approve"action:@selector(two:)];

            UIMenuItem *item3 = [[UIMenuItemalloc]initWithTitle:@"Deny"action:@selector(three:)];

            UIMenuController *menu = [UIMenuControllersharedMenuController];

            [menu setMenuItems:[NSArrayarrayWithObjects:item1,item2, item3, nil]];

            [menusetTargetRect:cell.frame  inView:cell];

            [menu setMenuVisible:YESanimated:YES];

      }

}


通过上面这段代码,自定义剪贴板界面初步完成,但要显示必须实现下面的方法,已经是第一响应者的无需实现(UITextField/ UITextView/ UIWebView)

- (BOOL)canBecomeFirstResponder{

    returnYES;

}


下面就是你所要使用的方法了

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{

    if(action ==@selector(one:)){

        return  YES;

    }

    else if(action == @selector(two:)){

        return  YES;

    }

    else if(action == @selector(three:)){

        return  YES;

    }

    else return NO;

}



- (void)one:(id)sender {

  //  method

}

- (void)two:(id)sender {

  //  method

}


- (void)three:(id)sender {

  //  method

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值