请认真阅读,因为里面有很多细节!
UIMenuController的介绍
- 什么是UIMenuController?
UIMenuController是UIKit里面的控件
UIMenuController的作用在开发中弹出的菜单栏
后面介绍了菜单栏显示中文的设置
菜单栏
有哪些控件是自带UIMenuController菜单栏效果的呢?
- UITextField
- UITextView
- UIWebView
系统菜单栏效果.gif
有些读者问我这个动图是怎么添加的: 我用的是licecap 这个软件
下面送个几个好用的软件
好用的软件
主要介绍两种:
一种是控制器为第一响应者
另一种是当前UI控件为第一响应者 (把方法封装在控件里面)
具体看代码,注释里我会详细讲解,如果实在不懂不妨动手敲一遍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
@interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *label; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //首先要允许label可以跟用户交互 self.label.userInteractionEnabled = YES; //给label添加一个敲击手势 [self.label addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClick)]]; } /** 点击label触发的方法 */ - (void)labelClick { //控制器不需要调用这个方法, 但是其他乱七八糟的UI控件就需要调用这个方法 \ 因为控制器默认是第一响应者 //[self becomeFirstResponder]; //显示menu 从来没有让menu跟控制器有关系 , 因为是第一响应者, 所以会调用第一响应者的方法 //不一定调用控制器的方法, 因为现在控制器是第一响应者 // 获得菜单 UIMenuController *menu = [UIMenuController sharedMenuController]; // 菜单最终显示的位置 CGRect rect = CGRectMake(100, 100, 100, 100); [menu setTargetRect:rect inView:self.label]; //为什么要设置2个参数 为了通用 \ 一个是矩形框, 一个是在哪个View上面 //传了矩形框, 要告诉坐标原点在哪, 坐标原点就在view上\ 以tagreView的左上角为坐标原点 // 苹果设计2个参数 是因为矩形框一旦修改 出现的位置在哪里都是可以的 /* targetRect:menuController指向的矩形框 targetView:targetRect以targetView的左上角为坐标原点 */ // 显示菜单 [menu setMenuVisible:YES animated:YES]; /* 得通过第一响应者,来告诉MenuController它内部应该显示什么内容 */ } #pragma mark - 第一响应者 + UIMenuController /** * 说明控制器可以成为第一响应者 * 因为控制器是因为比较特殊的对象,它找控制器的方法,不找label的方法 */ - (BOOL)canBecomeFirstResponder { return YES; } /** * 通过这个方法告诉UIMenuController它内部应该显示什么内容 * 返回YES,就代表支持action这个操作 */ - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { //打印, 将一个方法转换成字符串 你就会看到许多方法 NSLog(@"%@",NSStringFromSelector(action)); if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:)) { return YES; } return NO; } //监听事情需要对应的方法 冒号之后传入的是UIMenuController - (void)cut:(UIMenuController *)menu { NSLog(@"%s %@", __func__, menu); } - (void)copy:(UIMenuController *)menu 5a0fa0c1df16.png">
菜单栏 有哪些控件是自带UIMenuController菜单栏效果的呢?
系统菜单栏效果.gif 有些读者问我这个动图是怎么添加的: 我用的是licecap 这个软件 好用的软件
|