UIMenuController的使用(一)

今天遇到一個這樣的需求:

在點(diǎn)擊UILabel的時候,會彈出來一個類似于下圖的效果:

Paste_Image.png
第一次看到這個需求的時候,真的是一臉懵逼,在自己的印象中UILabel從來沒有這種屬性,最后經(jīng)過一天的網(wǎng)上查找資料,發(fā)現(xiàn)之所以能夠彈出這個框,是因為調(diào)用了UIMenuController,于是乎就開始寫Demo來測試.

下面介紹一下UIMenuController的用法:

  • 默認(rèn)情況下,有一下控件已經(jīng)支持UIMenuController
    - UITextField
    - UITextView
    - UIWebView

但是UILabel不支持UIMenuController,為了讓UILabel也支持,這時候需要自定義UILabel;

  • 在.h文件
    #import <UIKit/UIKit.h>
    @interface XJLabel : UILabel
    @end
  • 在.m文件
      #import "XJLabel.h"
      @implementation XJLabel

      - (void)awakeFromNib {
          [super 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有資格成為第一響應(yīng)者
       */
      - (BOOL)canBecomeFirstResponder  {
          return YES;
        }
      /**
       * label能執(zhí)行哪些操作(比如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 {
            // 將自己的文字復(fù)制到粘貼板
            [self copy:menu];
            // 清空文字
             self.text = nil;
      }
      - (void)copy:(UIMenuController *)menu  {
          // 將自己的文字復(fù)制到粘貼板
          UIPasteboard *board = [UIPasteboard generalPasteboard];
          board.string = self.text;
       }
        - (void)paste:(UIMenuController *)menu {
          // 將粘貼板的文字 復(fù)制 到自己身上
          UIPasteboard *board = [UIPasteboard generalPasteboard];
          self.text = board.string;
      }

      - (void)labelClick  {
          // 1.label要成為第一響應(yīng)者(作用是:告訴UIMenuController支持哪些操作, 這些操作如何處理)
          [self becomeFirstResponder];
    
          // 2.顯示MenuController
          UIMenuController *menu = [UIMenuController sharedMenuController];
          // targetRect: MenuController需要指向的矩形框
          // targetView: targetRect會以targetView的左上角為坐標(biāo)原點(diǎn)
          [menu setTargetRect:self.bounds inView:self];
      //    [menu setTargetRect:self.frame inView:self.superview];
          [menu setMenuVisible:YES animated:YES];
      }

      @end
用自定義UILabel以后,顯示出來的效果圖如下:
Snip20161015_4.png

但是這還不是需求要的效果:

Paste_Image.png

這和需求要的效果還有一點(diǎn)差距,所以用系統(tǒng)的UIMenuController顯然是不行,所以這時候要自定義UIMenuController,具體的實現(xiàn)方法在下一篇文章來實現(xiàn), 如果感覺文章對大家有幫助,請點(diǎn)個贊,我會繼續(xù)努力.......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 默認(rèn)已經(jīng)支持UIMenuController的控件: UITextField UITextView UIWebVi...
    BrightFuture閱讀 1,441評論 2 7
  • 1. UIMenuController示例 2. UIMenuController須知 默認(rèn)情況下,以下3個控件已...
    蕭雪痕閱讀 496評論 0 2
  • UIMenuController的示例 UIMenuController須知 - 默認(rèn)情況下, 有以下控件已經(jīng)支持...
    Hevin_Chen閱讀 407評論 0 0
  • 1、禁止手機(jī)睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa閱讀 1,206評論 1 6
  • 在腐國上學(xué),最近終于春天來了,天氣也暖和了起來。 端午節(jié)也到來了!康河上有龍舟比賽,河邊的草坪上還有各種活動。 賽...
    溫風(fēng)始閱讀 301評論 1 0

友情鏈接更多精彩內(nèi)容