iOSiOS移动开发iOS系统框架

你见过却不知道的UIMenuController

2015-09-02  本文已影响2158人  Andyzhao

前言:最近一段时间都在做项目,写博客很少,这几天会把项目中遇到的一些小知识点总结分享给大家.

先看一下图,苹果自带的UIMenuController都在什么地方
UITextFiled.png UITextView.png UIWebView.png cell.png
#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


lable.png
上述实现过程也不是很难,关键是大家需要知道有这个功能,当项目有这样的需求知道怎么做就行

注: 上面整个示例过程可能对于初学者可能还存在以下问题

语言问题.png

解决方法:

语言解决.png
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;  // default is NO

解决方法:
1⃣️
lable.userInteractionEnabled = YES;
2⃣️

交互.png
上一篇 下一篇

猜你喜欢

热点阅读