UI控件笔记

2016-03-30  本文已影响313人  选一个昵称呗









7DBEF01C-5643-4F95-83A3-B0DBDDE4F9EB.png
    #import <UIKit/UIKit.h>
    @interface XXLabel : UILabel
    @end
    @implementation XXLabel
    - (void)awakeFromNib
    {
        [self setup];
    }
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            [self setup];
        }
        return self;
    }
    
    - (void)setup
    {
        self.userInteractionEnabled = YES;
        [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClick)]];
    }
    
    /**
     * 让label有资格成为第一响应者
     */
    - (BOOL)canBecomeFirstResponder
    {
        return YES;
    }
    
    /**
     * label能执行哪些操作(比如copy, paste等等)
     * @return  YES:支持这种操作
     */
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
        if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:)) return YES;
        
        return NO;
    }
    
    - (void)cut:(UIMenuController *)menu
    {
        // 将自己的文字复制到粘贴板
        [self copy:menu];
        
        // 清空文字
        self.text = nil;
    }
    
    - (void)copy:(UIMenuController *)menu
    {
        // 将自己的文字复制到粘贴板
        UIPasteboard *board = [UIPasteboard generalPasteboard];
        board.string = self.text;
    }
    
    - (void)paste:(UIMenuController *)menu
    {
        // 将粘贴板的文字 复制 到自己身上
        UIPasteboard *board = [UIPasteboard generalPasteboard];
        self.text = board.string;
    }
    
    - (void)labelClick
    {
        // 1.label要成为第一响应者(作用是:告诉UIMenuController支持哪些操作, 这些操作如何处理)
        [self becomeFirstResponder];
        
        // 2.显示MenuController
        UIMenuController *menu = [UIMenuController sharedMenuController];
        // targetRect: MenuController需要指向的矩形框
        // targetView: targetRect会以targetView的左上角为坐标原点
        [menu setTargetRect:self.bounds inView:self];
        //    [menu setTargetRect:self.frame inView:self.superview];
        [menu setMenuVisible:YES animated:YES];
    }
    @end

UILabel实现弹出自定义功能

6D53A983-44A2-44BC-B2C5-A176D17B36F5.png
    #import "XXLabel.h"
    @interface XXLabel : UILabel
    @end
    @implementation XXLabel
    - (void)awakeFromNib
    {
        [self setup];
    }
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            [self setup];
        }
        return self;
    }
    
    - (void)setup
    {
        self.userInteractionEnabled = YES;
    }
    
    /**
     * 让label有资格成为第一响应者
     */
    - (BOOL)canBecomeFirstResponder
    {
        return YES;
    }
    
    /**
     * label能执行哪些操作(比如copy, paste等等)
     * @return  YES:支持这种操作
     */
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
        return NO;
    }
    @end


    #import "ViewController.h"
    #import "XXLabel.h"
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UIWebView *webView;
    @property (weak, nonatomic) IBOutlet XXLabel *label;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        //    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
        [self.webView loadHTMLString:@"<div style=\"color:red;\">哈哈哈哈</div>" baseURL:nil];
        
        [self.label addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClick)]];
    }
    
    - (void)labelClick
    {
        // 1.label要成为第一响应者(作用是:告诉UIMenuController支持哪些操作, 这些操作如何处理)
        [self.label becomeFirstResponder];
        
        // 2.显示MenuController
        UIMenuController *menu = [UIMenuController sharedMenuController];
        
        // 添加MenuItem, 要添加到控制器
        UIMenuItem *ding = [[UIMenuItem alloc] initWithTitle:@"顶" action:@selector(ding:)];
        UIMenuItem *replay = [[UIMenuItem alloc] initWithTitle:@"回复" action:@selector(replay:)];
        UIMenuItem *report = [[UIMenuItem alloc] initWithTitle:@"举报" action:@selector(report:)];
        menu.menuItems = @[ding, replay, report];
        
        [menu setTargetRect:self.label.bounds inView:self.label];
        [menu setMenuVisible:YES animated:YES];
    }
    
    - (void)ding:(UIMenuController *)menu
    {
        NSLog(@"%s %@", __func__ , menu);
    }
    
    - (void)replay:(UIMenuController *)menu
    {
        NSLog(@"%s %@", __func__ , menu);
    }
    
    - (void)report:(UIMenuController *)menu
    {
        NSLog(@"%s %@", __func__ , menu);
    }
    @end




上一篇 下一篇

猜你喜欢

热点阅读