前言:最近一段时间都在做项目,写博客很少,这几天会把项目中遇到的一些小知识点总结分享给大家.
先看一下图,苹果自带的UIMenuController都在什么地方
- UITextFiled
- UITextView
- UIWebView
- 由以上3张图可以看出UITextFiled,UITextView,UIWebView,在这几个控件上点击时都能够弹出UIMenuController,以便我们实现拷贝,粘贴等功能, 但我们在实际开发过程中有可能有这样的需求,如下图
-
大家都知道, cell不具备以上功能的,需要我们自己实现这种需求,下面为了方便演示,我对前三张图片中的UILable实现上述功能.
-
要让UILable实现上述功能我们需要对UILable进行重写,代码如下;
#import "ZHLable.h"
@implementation ZHLable
- (void)awakeFromNib
{
// 给lable添加手势
[self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClick)]];
}
/**
* label可以成为第一响应者
*/
- (BOOL)canBecomeFirstResponder
{
return YES;
}
/**
* 监听label点击
*/
- (void)labelClick
{
// 成为第一响应者
[self becomeFirstResponder];
// 弹出MenuController
UIMenuController *menu = [UIMenuController sharedMenuController];
// 设置显示的范围
// [menu setTargetRect:self.bounds inView:self];
[menu setTargetRect:self.frame inView:self.superview];
[menu setMenuVisible:YES animated:YES];
}
/**
* 这个方法决定了MenuController的菜单项内容
* 返回YES,就代表MenuController会有action菜单项
*/
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(cut:)
|| action == @selector(copy:)
|| action == @selector(paste:)) return YES;
return NO;
}
#pragma mark - 菜单点击处理
- (void)cut:(UIMenuController *)menu
{
// 将当前label的文字设置到粘贴板
[UIPasteboard generalPasteboard].string = self.text;
// 清空文字
self.text = nil;
}
- (void)copy:(UIMenuController *)menu
{
// 将当前label的文字设置到粘贴板
[UIPasteboard generalPasteboard].string = self.text;
}
- (void)paste:(UIMenuController *)menu
{
// 将粘贴板的文字设置到当前label上
self.text = [UIPasteboard generalPasteboard].string;
}
@end
- OK,这样我们实现了上述功能, 如下图:
上述实现过程也不是很难,关键是大家需要知道有这个功能,当项目有这样的需求知道怎么做就行
注: 上面整个示例过程可能对于初学者可能还存在以下问题
- (一)语言问题:
解决方法:
语言解决.png- (二)UILable默认不能与用户交互
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled; // default is NO
解决方法:
1⃣️
lable.userInteractionEnabled = YES;
2⃣️
网友评论