For investors
股價(jià):
5.36 美元 %For investors
股價(jià):
5.36 美元 %認(rèn)真做教育 專心促就業(yè)
先聲明一下,下面用到的方法是本人已經(jīng)過(guò)實(shí)際運(yùn)行達(dá)到預(yù)期效果后的總結(jié),諸位在參考時(shí)可少走一些彎路,放心嘗試。
我們所要達(dá)到的預(yù)期效果是,用UIWebView加載網(wǎng)頁(yè),長(zhǎng)按某單詞后彈出我們自定義的菜單欄,不顯示系統(tǒng)本身自帶的,點(diǎn)擊某一菜單進(jìn)行對(duì)應(yīng)的處理。
首先,先自定義需要的菜單欄
[cpp]
UIMenuController *menuController = [UIMenuController sharedMenuController];
UIMenuItem *menuItemCiYi = [[UIMenuItem alloc] initWithTitle:@"看詞義" action:@selector(ciYi:)];
UIMenuItem *menuItemSound = [[UIMenuItem alloc] initWithTitle:@"聽(tīng)發(fā)音" action:@selector(listeningSound:)];
UIMenuItem *menuItemShengCi = [[UIMenuItem alloc] initWithTitle:@"加入生詞本" action:@selector(addWord:)];
NSArray *mArray = [NSArray arrayWithObjects:menuItemCiYi,menuItemSound,menuItemShengCi, nil];
[menuItemCiYi release];
[menuItemSound release];
[menuItemShengCi release];
[menuController setMenuItems:mArray];
可以看出,每個(gè)菜單對(duì)應(yīng)的操作方法名,至于這段代碼寫(xiě)在什么位置,稍后再說(shuō),這也是需要額外注意的地方。
自定義一個(gè)繼承UIWebView的控件CustomWebView,手動(dòng)處理某一菜單對(duì)應(yīng)的操作
在CustomWebView.m中
[cpp]
//
// CustomWebView.m
// LrcWebViewTest
//
// Created by Andy on 12-6-20.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "CustomWebView.h"
@implementation CustomWebView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)awakeFromNib{
}
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
if(action == @selector(ciYi:) || action == @selector(listeningSound:) ||action == @selector(addWord:)){
return YES;
}
return NO;
}
-(IBAction)ciYi:(id)sender;{
NSLog(@"ciYi");
}
-(IBAction)listeningSound:(id)sender{
NSLog(@"listeningSound");
}
-(IBAction)addWord:(id)sender{
NSLog(@"addWord");
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
通過(guò)重寫(xiě)-(BOOL)canPerformAction:(SEL)action withSender:(id)sender函數(shù),告知菜單欄哪些菜單可以顯示。
然后就是討論這個(gè)自定義的菜單欄,應(yīng)該寫(xiě)在什么位置。#
之前是寫(xiě)在CustomWebView.m的initWithFrame方法中,但是長(zhǎng)按后菜單欄一直沒(méi)有出來(lái),后來(lái)發(fā)現(xiàn),如果是通過(guò)xib添加此控件的話,通過(guò)斷點(diǎn)跟蹤就可發(fā)現(xiàn),它是不會(huì)執(zhí)行initWithFrame方法的,所以那段代碼應(yīng)該寫(xiě)在-(void)awakeFromNib方法中,如果是通過(guò)代碼添加的,就應(yīng)該寫(xiě)在initWithFrame方法中,否則不執(zhí)行添加菜單的操作。
還有一點(diǎn)是,剛剛在嘗試過(guò)程中發(fā)現(xiàn),如果將添加菜單欄的代碼寫(xiě)在添加UIWebView控件界面的ViewDidLoad中也可以達(dá)到對(duì)應(yīng)的效果,也許你會(huì)問(wèn),這樣做的話是改變了那個(gè)界面的菜單欄,會(huì)不會(huì)那個(gè)界面中彈出的菜單欄都是同一個(gè)樣子?答案是不會(huì)的,因?yàn)橥ㄟ^(guò)重寫(xiě)
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender這個(gè)方法可以篩選出需要的菜單項(xiàng),而自定義的WebView中已經(jīng)重寫(xiě)了這個(gè)方法,所以在webview中彈出的菜單是需要的菜單項(xiàng),在其他控件中例如TextField控件,彈出的依舊會(huì)是系統(tǒng)默認(rèn)的菜單項(xiàng),只是出于程序可讀性,可維護(hù)性考慮,最好在自定義的控件中修改菜單性,單獨(dú)封裝起來(lái)。
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!