UIMenuController使用

當(dāng)蘋果在 iOS 3.0 中增加了剪切、復(fù)制和粘貼功能時返十,它同時為開發(fā)者提供了 UIMenuController 組件用來定制該彈出菜單姨涡,但不幸的是,最開始的實現(xiàn)要很麻煩吧慢。

  1. 附加在菜單的視圖的 canBecomeFirstResponser 必須返回 YES涛漂,這意味著必須子類化。例如最常用的顯示元素 UITableViewCellUILabel 默認(rèn)返回的是 NO
  • UILongPressGestureRecognizer 直到 iOS 3.2 才提供, which means that the long press to initiate the menu display had to be implemented via touchesBegan:withEvent:, touchesMoved:withEvent:, andtouchesEnded:withEvent:. Every custom long press recognizer might use a different delay constant, which could easily confuse users who are used to another app's implementation.

而最新的 iOS 使用兩種基本方法解決了這個問題检诗,一個是表格單元格匈仗,另外一個是定制菜單選項。

指定情景: UITableViewCell on iOS 5

如果你只是想在 UITableViewCell 中使用系統(tǒng)提供的復(fù)制粘貼功能(大部分情況是這樣)逢慌,iOS 5.0 有更簡單的方法:

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
if (action == @selector(copy:)) {
    returnYES;    
}
returnNO; 
}
- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
if (action == @selector(copy:)) {
    [UIPasteboard generalPasteboard].string = [data objectAtIndex:indexPath.row];
}
}

該菜單調(diào)用 tableView:canPerformAction:forRowAtIndexPath:withSender
以確認(rèn)是否該顯示系統(tǒng)菜單選項并調(diào)用
tableView:performAction:forRowAtIndexPath:withSender:當(dāng)用戶選擇某個選項時.

為了讓菜單顯示悠轩,目標(biāo)視圖必須在 responder 鏈中,很多 UIKit 視圖默認(rèn)并無法成為一個 responder 攻泼,因此你需要之類這些視圖重載 canBecomeFirstResponder 方法范圍 YES

在下面例子中火架,我們使用定制類 TSTableViewCell 并實現(xiàn)了長按選擇器

- (void)longPress:(UILongPressGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateBegan) {
    TSTableViewCell *cell = (TSTableViewCell *)recognizer.view;
    [cell becomeFirstResponder];
    UIMenuItem *flag = [[UIMenuItem alloc] initWithTitle:@"Flag"action:@selector(flag:)];
    UIMenuItem *approve = [[UIMenuItem alloc] initWithTitle:@"Approve"action:@selector(approve:)];
    UIMenuItem *deny = [[UIMenuItem alloc] initWithTitle:@"Deny"action:@selector(deny:)];
    UIMenuController *menu = [UIMenuController sharedMenuController];
    [menu setMenuItems:[NSArray arrayWithObjects:flag, approve, deny, nil]];
    [menu setTargetRect:cell.frame inView:cell.superview];
    [menu setMenuVisible:YES animated:YES];
}
}
- (void)flag:(id)sender {
NSLog(@"Cell was flagged");
}
- (void)approve:(id)sender {
NSLog(@"Cell was approved");
}
- (void)deny:(id)sender {
NSLog(@"Cell was denied");
}

There is only one small gotcha with UIMenuItem: if the specified action is not implemented by your view controller, that item will not appear in the menu.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市忙菠,隨后出現(xiàn)的幾起案子何鸡,更是在濱河造成了極大的恐慌,老刑警劉巖牛欢,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骡男,死亡現(xiàn)場離奇詭異,居然都是意外死亡傍睹,警方通過查閱死者的電腦和手機隔盛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門犹菱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吮炕,你說我怎么就攤上這事腊脱。” “怎么了龙亲?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵陕凹,是天一觀的道長。 經(jīng)常有香客問我俱笛,道長,這世上最難降的妖魔是什么传趾? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任迎膜,我火速辦了婚禮,結(jié)果婚禮上浆兰,老公的妹妹穿的比我還像新娘磕仅。我一直安慰自己,他們只是感情好簸呈,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布榕订。 她就那樣靜靜地躺著,像睡著了一般蜕便。 火紅的嫁衣襯著肌膚如雪劫恒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天轿腺,我揣著相機與錄音两嘴,去河邊找鬼。 笑死族壳,一個胖子當(dāng)著我的面吹牛憔辫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仿荆,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼贰您,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拢操?” 一聲冷哼從身側(cè)響起锦亦,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎令境,沒想到半個月后孽亲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡展父,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年返劲,在試婚紗的時候發(fā)現(xiàn)自己被綠了玲昧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡篮绿,死狀恐怖孵延,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亲配,我是刑警寧澤尘应,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站吼虎,受9級特大地震影響犬钢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜思灰,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一玷犹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洒疚,春花似錦歹颓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乏德,卻和暖如春撤奸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喊括。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工寂呛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘾晃。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓贷痪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹦误。 傳聞我的和親對象是個殘疾皇子劫拢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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