iOS-UIMenuController的基本使用

前言

  • 在使用iPhone時(shí),長按文本視圖或編輯框會(huì)出現(xiàn)復(fù)制粘貼視圖,在iOS中該視圖叫做UIMenuController,最近項(xiàng)目中需要自定義復(fù)制和刪除操作,就了解了一些UIMenuController基本的使用方法.

UIMenuController基本使用

  • 在顯示UIMenuController的時(shí)候,被顯示視圖 canBecomeFirstResponser方法返回值必須為Yes,該方法是UIView的方法,而繼承與View的Lable和Cell默認(rèn)返回值是NO,所以要重寫該方法,并始終返回YES.
-(BOOL)canBecomeFirstResponder{
    return YES;
}
  • 1.Cell和Lable我們用手勢(shì)來綁定方法,并自定義UIMenuController要顯示的內(nèi)容.
// 添加長按手勢(shì)
 UILongPressGestureRecognizer * longPress=[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellLongPress:)];
 [cell addGestureRecognizer:longPress];
  • 2.當(dāng)觸發(fā)手勢(shì)方法的時(shí)候,要把視圖加入響應(yīng)者鏈條,才能完整的響應(yīng)整個(gè)事件,UIMenuController才能顯示出來,首先獲取響應(yīng)手勢(shì)的視圖,再調(diào)用becomeFirstResponder方法,并且手勢(shì)方法有各種狀態(tài),所以方法的調(diào)用是多次的,為了只執(zhí)行一次,一般加上判斷條件.
-(void)cellLongPress:(UIGestureRecognizer *)recognizer{ 
if (recognizer.state==UIGestureRecognizerStateBegan )   
MessageCell * messageCell=(MessageCell *)recognizer.view;  
[messageCell becomeFirstResponder];
}
  • 3.顯示UIMenuController時(shí),最重要就是顯示的塊內(nèi)容,因此先拼裝塊內(nèi)容UIMenuItem,以下初始化兩個(gè)Item,并綁定自定義方法.
UIMenuItem * copyItem=[[UIMenuItem alloc] initWithTitle:@"復(fù)制" action:@selector(myCopy:)];
UIMenuItem * deleateItem=[[UIMenuItem alloc] initWithTitle:@"刪除" action:@selector(myDeleate:)];
  • 4.最后就是獲取UIMenuController單利,把Item塞進(jìn)去,并顯示出來,最后要注意設(shè)置顯示位置,傳入的Rect要和view是在同一參照坐標(biāo)系中.
//   獲取UIMenuController單例
UIMenuController * menuControl=[UIMenuController sharedMenuController];
//   塞進(jìn)UIMenuController中
[menuControl setMenuItems:[NSArray arrayWithObjects:copyItem,deleateItem ,nil]];
//   設(shè)置要顯示的位置
[menuControl setTargetRect:CGRectMake(messageCell.contentBtn.frame.origin.x, messageCell.contentBtn.frame.origin.y, messageCell.contentBtn.frame.size.width, messageCell.contentBtn.frame.size.height) inView:messageCell];
//   顯示出來
 [menuControl setMenuVisible:YES animated:YES];
  • 5.最后就是兩個(gè)自定義的item方法.
-(void)myCopy:(id)sender
{
//獲取粘貼板單例并把Cell中的文本值賦入
    [[UIPasteboard generalPasteboard] setString:self.currentSelectMessgaeCell.contentBtn.currentTitle];
}
-(void)myDeleate:(id)sender
{
//    刪除環(huán)信某一條聊天(項(xiàng)目中用到環(huán)信聊天)
    NSString * messageID=self.currentSelectMessgaeCell.messageFrame.message.messageId;
    if ([self.conversation removeMessageWithId:messageID]) {
//    根據(jù)Cell定位Cell的位置
        NSIndexPath * path = [self.tableView indexPathForCell:self.currentSelectMessgaeCell];
//    根據(jù)位置刪除內(nèi)存數(shù)據(jù)
        [self.tableDataSource removeObjectAtIndex:path.row];
//    再刪除對(duì)應(yīng)位置的Cell
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:UITableViewRowAnimationRight];
    }
}

UIMenuController的使用并不難,蘋果已經(jīng)封裝好了一些原子化操作,只需要我們拼裝起來就行了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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