天天看點

在UIWebView中添加自定義編輯菜單

如何在uiwebview中添加自定義的編輯菜單困擾了很久。沒想到意外的簡單!

現在很多的内容提供類應用中,長按内容頁會選中按的單詞并且顯示一個編輯菜單。如圖:

在UIWebView中添加自定義編輯菜單

獨樂樂不如衆樂樂。一篇好文章是需要大家一起欣賞的。一篇八卦文也是需要大家一起八卦的。

tabbar的一個分享按鈕畢竟沒法把這篇文章的亮點附帶上。是以讓使用者通過長按,然後可以選擇需要

分享的内容。最後再在彈出的菜單中選擇“分享”去分享給好友。這樣使用者可以把打動他,的一句話分享出去。

使用者選擇的這句話不一定是文章的什麼重點啊,中心啊(額,想到小時候國文課上的總結文章中心思想什麼的了)。

但是肯定是能引起使用者或者使用者的這個圈子注意的一句話。這個選擇權一定要給使用者。

如何實作呢?簡單!上代碼:

1. 繼承uiwebview

2. 在構造函數中添加自定義菜單項

在UIWebView中添加自定義編輯菜單
在UIWebView中添加自定義編輯菜單

 看到uimenuitem了嗎,這個就是自定義菜單項。title設定為“分享”顯示出來後就是“分享”。呵呵,說了句廢話。

當這個菜單項被點選時執行的方法為 - (void)flag:(id)sender.

3. 添加菜單事件

在UIWebView中添加自定義編輯菜單
在UIWebView中添加自定義編輯菜單

當我們的自定義菜單項被點選的時候,這個方法就會被執行。

在代碼中的這句:

把使用者標明的文本内容拷貝到了剪切闆中。下一句:

通路剪切闆中複制的内容。這時你就可以把使用者標明的内容拿到手裡了。

到這裡,我們需要實作的功能其實已經可以實作了。但是美中不足的是,如果系統自帶的菜單不是你想要的呢?

是以還要看這裡:

在UIWebView中添加自定義編輯菜單
在UIWebView中添加自定義編輯菜單

這個方法是重寫了基類uiwebview中的實作。

直接屏蔽掉了系統自帶的定義菜單項。在上面的上面的代碼中selectall:對應的傳回了yes,如果傳回no,則全選這一項也不再顯示。

知其然,也要知其是以然。對于自定義編輯菜單來說,uiwebview實作了uiresponder的canperformaction:(sel)action withsender:(id)sender

方法,預設的提供如下的菜單項對應的selector:

<code>cut:</code> 剪切選中文字到剪貼版。

<code>copy:</code> 拷貝/複制選中文字到剪貼版。

<code>select:</code> 當處于文本編輯模式時,選中光标目前位置的一個單詞。

<code>selectall:</code> 選中目前頁所有文字。

<code>paste:</code> 粘貼剪貼版中的文本到目前光标位置。

<code>delete:</code> 處于文本編輯模式時,删除選中的文本。(since ios 3.2)

<code>_promptforreplace:</code> 即為上面google+圖檔中顯示的“替換為...”菜單,點選之後會給出與目前選中單詞相近的其他單詞。

<code>_showtextstyleoptions:</code> 處于文本編輯模式時,用于編輯字型風格屬性,如粗體/斜體等。

<code>_define:</code> 調用ios系統内置的英語詞典,解釋選中的單詞。如果内置詞典中找不到所選單詞,則該項不予顯示。

<code>_accessibilityspeak:</code> 朗讀目前選中的文本。

<code>_accessibilitypausespeak:</code> 暫停朗讀文本。

<code>maketextwritingdirectionrighttoleft:</code> 調整選中文本的書寫格式為從右至左。阿拉伯語會用到。(since ios 5.0)

<code>maketextwritingdirectionlefttoright:</code> 調整選中文本的書寫格式為從左至右。(since ios 5.0

加下劃線的就是所謂的私有方法了。開發者無權通路。是以前面去掉定義菜單項可能會有問題。寫此文的時候我的應用還沒釋出,是以各位慎重權衡。

因為是在原型開發階段,菜單項的國際化什麼的各位自己把握。

下面是全部代碼:

header

source

在UIWebView中添加自定義編輯菜單
在UIWebView中添加自定義編輯菜單

全文完。謝謝各位!

歡迎加群互相學習,共同進步。qq群:ios: 58099570 | android: 330987132 | go:217696290 | python:336880185 | 做人要厚道,轉載請注明出處!http://www.cnblogs.com/sunshine-anycall/p/3245940.html

繼續閱讀