iOS開(kāi)發(fā)之-UIMenuController

在iOS應(yīng)用中,我們經(jīng)常會(huì)做一些跟輸入內(nèi)容相關(guān)的操作,由于對(duì)絕大多數(shù)用戶來(lái)說(shuō)打字都是一件比較痛苦的事情,因此有沒(méi)有一種可以讓我們的用戶以偷懶的方式完成內(nèi)容的輸入呢???

非常幸運(yùn)的是,apple給我們提供了這種偷懶的功能,讓用戶可以通過(guò)"command+c","command+v"的方式來(lái)完成內(nèi)容的輸入,完成這種偷懶功能的主角就是UIMenuController.

Paste_Image.png

在iOS的控件中,如下的控件已經(jīng)默認(rèn)支持UIMenuViewController:
1.UITextFild

Paste_Image.png

2.UITextView

Paste_Image.png

3.UIWebView...

Paste_Image.png

這么好用的功能只有這三個(gè)控件能玩兒么?? 我們自定義的控件可以實(shí)現(xiàn)這樣的功能么??
經(jīng)研究發(fā)現(xiàn),答案是YES的,現(xiàn)在我將以UILabel為例子進(jìn)行說(shuō)明

要使用UIMenuController指向某一個(gè)控件,就必須讓該控件成為第一響應(yīng)者
1.讓該控件成為第一響應(yīng)者

[self becomeFirstResponder];

2.注意:并不是調(diào)用了上面一句代碼的所有控件都能成為第一響應(yīng)者
因此我們還得在這個(gè)控件中添加:

- (BOOL)canBecomeFirstResponder
{  
    return YES;
}

3.控制菜單上顯示什么樣的菜單項(xiàng)

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(copy:) || action == @selector(paste:) || action == @selector(cut:)) {
        return YES;
    }
    return NO;
}

4.讓菜單顯示出來(lái)

[menuVc setTargetRect:self.frame inView:self.superview];
[menuVc setMenuVisible:YES animated:YES];

5.處理菜單上菜單項(xiàng)的點(diǎn)擊事件

- (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)cut:(UIMenuController *)menu
{
    [self copy:menu];
    self.text = nil;
}
Paste_Image.png
#import "LXBLabel.h"

@implementation LXBLabel

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (void)awakeFromNib
{
    [self setup];
}

- (void)setup
{
    self.userInteractionEnabled = YES;
    [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickLabel)]];
}

- (void)clickLabel
{   
    [self becomeFirstResponder];
    UIMenuController *menuVc = [UIMenuController sharedMenuController];

// 控制好menu的顯示與隱藏
UIMenuController *menuVc = [UIMenuController sharedMenuController];
    if (menuVc.isMenuVisible) {
        [menuVc setMenuVisible:NO animated:YES];
    }
    [menuVc setTargetRect:self.frame inView:self.superview];
    [menuVc setMenuVisible:YES animated:YES];
}

- (BOOL)canBecomeFirstResponder
{
   // 明確該控件可以成為第一響應(yīng)者 
    return YES;
}

// 該控件可以執(zhí)行哪些動(dòng)作
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(copy:) || action == @selector(paste:) || action == @selector(cut:)) {
        return YES;
    }
    return NO;
}

- (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)cut:(UIMenuController *)menu
{
    [self copy:menu];
    self.text = nil;
}

@end

在實(shí)際的開(kāi)發(fā)中,系統(tǒng)默認(rèn)的菜單項(xiàng)就夠了嗎??
肯定是不夠的,我們往往要根據(jù)項(xiàng)目的實(shí)際需求去定制菜單項(xiàng),比如:

Paste_Image.png

定制菜單項(xiàng):

 UIMenuItem *item1 = [[UIMenuItem alloc] initWithTitle:@"item1" action:@selector(item1Click:)];
 UIMenuItem *item2 = [[UIMenuItem alloc] initWithTitle:@"item2" action:@selector(item2Click:)];
 menuVc.menuItems = @[item1,item2];

// 處理菜單項(xiàng)的點(diǎn)擊事件
- (void)item1Click:(UIMenuController *)menu
{
    NSLog(@"item1Click");
}

- (void)item2Click:(UIMenuController *)menu
{
    NSLog(@"item2Click");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亲善,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子迫像,更是在濱河造成了極大的恐慌碌尔,老刑警劉巖纺棺,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件获黔,死亡現(xiàn)場(chǎng)離奇詭異拒逮,居然都是意外死亡硕噩,警方通過(guò)查閱死者的電腦和手機(jī)骇径,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)躯肌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人破衔,你說(shuō)我怎么就攤上這事羡榴。” “怎么了运敢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵校仑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我传惠,道長(zhǎng)迄沫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任卦方,我火速辦了婚禮羊瘩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盼砍。我一直安慰自己尘吗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布浇坐。 她就那樣靜靜地躺著睬捶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪近刘。 梳的紋絲不亂的頭發(fā)上擒贸,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音觉渴,去河邊找鬼介劫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛案淋,可吹牛的內(nèi)容都是我干的座韵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼踢京,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼誉碴!你這毒婦竟也來(lái)了宦棺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翔烁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后旨涝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蹬屹,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年白华,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慨默。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弧腥,死狀恐怖厦取,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情管搪,我是刑警寧澤虾攻,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站更鲁,受9級(jí)特大地震影響霎箍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澡为,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一漂坏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媒至,春花似錦顶别、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谋旦,卻和暖如春条篷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛤织。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工赴叹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人指蚜。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓乞巧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親摊鸡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绽媒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 我能理解你蚕冬,但我不會(huì)放棄。喜不喜歡你是辕,喜歡到什么程度囤热,對(duì)你什么態(tài)度,那是我的事获三。所以你不要有壓力旁蔼。
    熊貓掰棒子閱讀 213評(píng)論 0 0
  • transpires:(秘密或未知事實(shí))暴露,公開(kāi)疙教,為人所知 / 發(fā)生 / (人體或植物)蒸騰棺聊,水分蒸發(fā) aide...
    大立柜閱讀 361評(píng)論 0 0
  • 有人說(shuō),社會(huì)日益浮躁贞谓,精神失焦限佩。一言以蔽之,自然是偏頗的裸弦∷钔可于某些領(lǐng)域之中,依然還是能窺見(jiàn)浮躁之端倪理疙,或許耐亏,都已不...
    傀儡宋饹馇閱讀 167評(píng)論 0 1
  • 今天是開(kāi)始寫(xiě)作的第25天,對(duì)于5,10這樣的數(shù)字沪斟,總是有了里程碑式的感覺(jué)广辰,像是跑馬拉松跑到了一個(gè)標(biāo)志性的地點(diǎn),可以...
    燦燦_e560閱讀 264評(píng)論 6 7
  • 長(zhǎng)期究竟是多長(zhǎng)主之? 聽(tīng)文章的時(shí)候择吊,看文章的時(shí)候講的頭頭是道,感覺(jué)都是正確的槽奕,當(dāng)關(guān)閉語(yǔ)音的時(shí)候几睛,才發(fā)現(xiàn)就給自己的有以下...
    忠良162閱讀 274評(píng)論 0 0