UIMenuController

1.自定義Label的UIMenuController

#import "ZZYMenuLabel.h"

@implementation ZZYMenuLabel
/**
 *  xib創(chuàng)建label時調(diào)用
 */
- (void)awakeFromNib
{
    [self setUp];
}
/**
 *  代碼創(chuàng)建label時調(diào)用
 */
- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
         [self setUp];
    }
    return self;
}

- (void)setUp
{
    self.userInteractionEnabled = YES;
    [self addGestureRecognizer:[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress)]];
}

- (void)longPress
{
    NSLog(@"%s",__func__);

    //1.設(shè)置label為第一響應(yīng)者
    //通過設(shè)置第一響應(yīng)者UIMenuController可以獲得支持哪些操作的信息,操作怎么處理
    [self becomeFirstResponder];

    //2.設(shè)置UIMenuController
    UIMenuController * menu = [UIMenuController sharedMenuController];

    //當長按label的時候蕴忆,這個方法會不斷調(diào)用,menu就會出現(xiàn)一閃一閃不斷顯示狼荞,需要在此處進行判斷
    if (menu.isMenuVisible)return;
    //自定義 UIMenuController

    UIMenuItem * item1 = [[UIMenuItem alloc]initWithTitle:@"剪切" action:@selector(myCut:)];
    UIMenuItem * item2 = [[UIMenuItem alloc]initWithTitle:@"粘貼" action:@selector(myPaste:)];
    menu.menuItems = @[item1,item2];

    [menu setTargetRect:self.bounds inView:self];
//  [menu setTargetRect:self.frame inView:self.superview];

    [menu setMenuVisible:YES animated:YES];

}
#pragma mark - 對控件權(quán)限進行設(shè)置
/**
 *  設(shè)置label可以成為第一響應(yīng)者
 *
 *  @注意:不是每個控件都有資格成為第一響應(yīng)者
 */
- (BOOL)canBecomeFirstResponder
{
    return YES;
}
/**
 *  設(shè)置label能夠執(zhí)行那些具體操作
 *
 *  @param action 具體操作
 *
 *  @return YES:支持該操作
 */
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
//    NSLog(@"%@",NSStringFromSelector(action));

    if(action == @selector(cut:) || action == @selector(copy:) || action == @selector(myCut:)|| action == @selector(myPaste:)) return YES;
    return NO;
}

#pragma mark - 方法的實現(xiàn)
//- (void)cut:(id)sender
//{
//    
//    NSLog(@"%@",sender);
//    
//}

- (void)myCut:(UIMenuController *) menu
{
    NSLog(@"%s---%@",__func__,menu);
    //復制文字到剪切板
    [self copy:menu];
    //清空文字
    self.text = nil;

}

- (void)cut:(UIMenuController *)menu
{
    //復制文字到剪切板
    [self copy:menu];
    //清空文字
    self.text = nil;

}

- (void)copy:(UIMenuController *)menu
{
    //當沒有文字的時候調(diào)用這個方法會崩潰
     if (!self.text) return;
    //復制文字到剪切板
    UIPasteboard * paste = [UIPasteboard generalPasteboard];
    paste.string = self.text;

}

- (void)myPaste:(UIMenuController *)menu
{
    //將剪切板文字賦值給label
    UIPasteboard * paste = [UIPasteboard generalPasteboard];
    self.text = paste.string;
}
@end

2.UITableViewCell的使用

#import "ZZYTableViewCell.h"

@implementation ZZYTableViewCell

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

@end

#import "ZZYTableViewController.h"
#import "ZZYTableViewCell.h"

@interface ZZYTableViewController ()
@property (nonatomic, weak) ZZYTableViewCell * selectCell;
@end

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //當menucontroller顯示派哲,點擊不同的cell時為什么會顯示霸株。
//    menuController的顯示依賴于第一響應(yīng)者,當點擊另外的cell時去件,當前cell取消第一響應(yīng)者狀態(tài)坡椒,menucontroller自動消失
    UIMenuController * menu = [UIMenuController sharedMenuController];
    NSLog(@"%d",menu.isMenuVisible);
    //防止點擊多次創(chuàng)建
    if (menu.isMenuVisible)
    {
        [menu setMenuVisible:NO animated:YES];
    }
    else
    {

    ZZYTableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
        self.selectCell = cell;

    [cell becomeFirstResponder];

    UIMenuItem * item0 = [[UIMenuItem alloc]initWithTitle:@"分享" action:@selector(share:)];
    UIMenuItem * item1 = [[UIMenuItem alloc]initWithTitle:@"評論" action:@selector(comment:)];
    UIMenuItem * item2 = [[UIMenuItem alloc]initWithTitle:@"點贊" action:@selector(praise:)];
    menu.menuItems = @[item0,item1,item2];

    [menu setTargetRect:CGRectMake(0, cell.frame.size.height * 0.5, cell.frame.size.width, cell.frame.size.height) inView:cell];

    [menu setMenuVisible:YES animated:YES];
    }
}


- (void)share:(UIMenuController *)menu
{
    NSLog(@"%@",self.selectCell.textLabel.text);
}

- (void)comment:(UIMenuController *)menu
{

}

- (void)praise:(UIMenuController *)menu
{

}

//防止拖動tableView時產(chǎn)生的BUG
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    UIMenuController * menu = [UIMenuController sharedMenuController];
    [menu setMenuVisible:NO animated:YES];
}

3.設(shè)置位置

/**
 *  設(shè)置menu顯示的位置信息
 *
 *  @param targetRect menu需要顯示的矩形區(qū)域
 *  @param targetView targetRect會以targetView的左上角為坐標原點進行顯示
 */
- (void)setTargetRect:(CGRect)targetRect inView:(UIView *)targetView;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市箫攀,隨后出現(xiàn)的幾起案子幼衰,更是在濱河造成了極大的恐慌靴跛,老刑警劉巖渡嚣,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绝葡,居然都是意外死亡腹鹉,警方通過查閱死者的電腦和手機藏畅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門功咒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人力奋,你說我怎么就攤上這事〗δ兀” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵咐旧,是天一觀的道長绩蜻。 經(jīng)常有香客問我,道長辜羊,這世上最難降的妖魔是什么词顾? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任碱妆,我火速辦了婚禮,結(jié)果婚禮上疹尾,老公的妹妹穿的比我還像新娘上忍。我一直安慰自己纳本,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布吓笙。 她就那樣靜靜地躺著,像睡著了一般面睛。 火紅的嫁衣襯著肌膚如雪尊搬。 梳的紋絲不亂的頭發(fā)上叁鉴,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天幌墓,我揣著相機與錄音,去河邊找鬼克锣。 笑死腔长,一個胖子當著我的面吹牛袭祟,可吹牛的內(nèi)容都是我干的捞附。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胆绊,長吁一口氣:“原來是場噩夢啊……” “哼欧募!你這毒婦竟也來了压状?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤镣丑,失蹤者是張志新(化名)和其女友劉穎娱两,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體十兢,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年遥缕,在試婚紗的時候發(fā)現(xiàn)自己被綠了宵呛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡烤蜕,死狀恐怖迹冤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泡徙,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布莉兰,位于F島的核電站礁竞,受9級特大地震影響糖荒,放射性物質(zhì)發(fā)生泄漏模捂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一综看、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧红碑,春花似錦泡垃、人聲如沸析珊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锡溯。三九已至赶舆,卻和暖如春祭饭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倡蝙。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猪钮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓烤低,卻偏偏與公主長得像笆载,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凉驻,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理涝登,服務(wù)發(fā)現(xiàn)雄家,斷路器胀滚,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 一、UIMenuController認識 1.默認情況下蛛淋,UITextView / UITextFiled / U...
    iOS_成才錄閱讀 25,343評論 20 73
  • UIMenuController蘋果官方文檔 示例代碼下載地址 1. UIMenuController簡介 在很多...
    斷劍閱讀 19,471評論 20 58
  • 或許你因為一句話,就喜歡一部小說层宫。或許你因為一個細節(jié)而喜歡上一個人萌腿。對于蕭紅作品的喜愛源于去年的電影《黃金時代》。...
    匡匡說事1閱讀 378評論 0 1
  • 今天差一點就要放棄了米死,真是夠快的呢。上次也說我自己是個三分鐘熱度的人呢峦筒。 寫作的目的,我參加這個寫作訓練營之前就有...
    漂亮小哥哥閱讀 193評論 0 1