IT開發/UI設計/運營/影視特效培訓機構

400-111-8989

熱門課程

iPad開發:在UIWebView中自定義菜單欄

  • 發布:IT培訓
  • 來源:IT學習資料
  • 時間:2018-06-29 17:27

先聲明一下,下面用到的方法是本人已經過實際運行達到預期效果后的總結,諸位在參考時可少走一些彎路,放心嘗試。

我們所要達到的預期效果是,用UIWebView加載網頁,長按某單詞后彈出我們自定義的菜單欄,不顯示系統本身自帶的,點擊某一菜單進行對應的處理。

首先,先自定義需要的菜單欄

[cpp]

UIMenuController *menuController = [UIMenuController sharedMenuController];

UIMenuItem *menuItemCiYi = [[UIMenuItem alloc] initWithTitle:@"看詞義" action:@selector(ciYi:)];

UIMenuItem *menuItemSound = [[UIMenuItem alloc] initWithTitle:@"聽發音" 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];

可以看出,每個菜單對應的操作方法名,至于這段代碼寫在什么位置,稍后再說,這也是需要額外注意的地方。

自定義一個繼承UIWebView的控件CustomWebView,手動處理某一菜單對應的操作

在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

通過重寫-(BOOL)canPerformAction:(SEL)action withSender:(id)sender函數,告知菜單欄哪些菜單可以顯示。

然后就是討論這個自定義的菜單欄,應該寫在什么位置。www.2cto.com

之前是寫在CustomWebView.m的initWithFrame方法中,但是長按后菜單欄一直沒有出來,后來發現,如果是通過xib添加此控件的話,通過斷點跟蹤就可發現,它是不會執行initWithFrame方法的,所以那段代碼應該寫在-(void)awakeFromNib方法中,如果是通過代碼添加的,就應該寫在initWithFrame方法中,否則不執行添加菜單的操作。

還有一點是,剛剛在嘗試過程中發現,如果將添加菜單欄的代碼寫在添加UIWebView控件界面的ViewDidLoad中也可以達到對應的效果,也許你會問,這樣做的話是改變了那個界面的菜單欄,會不會那個界面中彈出的菜單欄都是同一個樣子?答案是不會的,因為通過重寫

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender這個方法可以篩選出需要的菜單項,而自定義的WebView中已經重寫了這個方法,所以在webview中彈出的菜單是需要的菜單項,在其他控件中例如TextField控件,彈出的依舊會是系統默認的菜單項,只是出于程序可讀性,可維護性考慮,最好在自定義的控件中修改菜單性,單獨封裝起來。

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

上一篇:iPhone/iPad開發之:掃盲貼
下一篇:iPhone應用中APNS推送通知流程代碼

達內it學習路線?如何學好it?

學編程需要什么基礎嗎?

Python、Java、C++該學哪一個

學編程需要什么基礎嗎

  • 掃碼領取資料

    回復關鍵字:視頻資料

    免費領取 達內課程視頻學習資料

  • 視頻學習QQ群

    添加QQ群:1143617948

    免費領取達內課程視頻學習資料

Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

選擇城市和中心
江西省

貴州省

廣西省

海南省

中出人妻中文字幕无码