iOS UIWebView鍵盤處理(轉(zhuǎn)載)

轉(zhuǎn)載自:
http://blog.csdn.net/assholeu/article/details/38714123

如果你有下面的問題,此文也許會幫到你豁遭。

  1. 鍵盤遮蓋了UIWebView叭喜。
  2. 如何拖動UIWebView來移除鍵盤。
  3. 鍵盤出現(xiàn)時UIWebView里面的Content內(nèi)容向上移動蓖谢,以至聚焦的文本框超出了UIWebView的可視區(qū)域捂蕴。
  4. 如何在鍵盤彈出時禁止UIWebView里面的Content向上移動。
  5. 無法在UIWebView中獲取到坐標(biāo)闪幽,來計算contentOffset得到想要展示的結(jié)果啥辨。

一步一步說明:

1. 喚出移除鍵盤

只要點擊UIWebView里面的html文本框控件,會自動彈出鍵盤盯腌。當(dāng)然你需要獲取鍵盤的信息(高度等)溉知,方法還是使用UIViewController+Notification的方式,代碼如下:

// UIKeyboardWillShowNotification和UIKeyboardWillHideNotification為鍵盤彈出或移除時iOS系統(tǒng)post notification的名字腊嗡,這里只需要定義self為這個通知的接收者即可着倾。  
    // viewWillAppear:和viewWillDisappear:大家應(yīng)該都很清楚拾酝,這兩個方法分別在self loadView和removefromsuperview后執(zhí)行燕少。  
    // 特別注意:這里的object參數(shù)需要是nil,不然取不到鍵盤的userInfo  
    - (void)viewWillAppear:(BOOL)animated {  
        [super viewWillAppear:animated];  
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];  
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];  
          
    }  
      
    - (void)viewWillDisappear:(BOOL)animated {  
        [super viewWillDisappear:animated];  
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];  
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];  
    }  
      
    - (void)keyboardWillShow:(NSNotification *)notification {  
        NSDictionary *userInfo = [notification userInfo];  
        NSValue* value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];  
        CGRect keyboardRect = [value CGRectValue]; // 這里得到了鍵盤的frame  
        // 你的操作,如鍵盤出現(xiàn)蒿囤,控制視圖上移等  
    }  
      
    - (void)keyboardWillHide:(NSNotification *)notification {  
        // 獲取info同上面的方法  
        // 你的操作客们,如鍵盤移除,控制視圖還原等  
    }  
2. 通過拖動UIWebView來移除鍵盤

self.webView.scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; // 當(dāng)拖動時移除鍵盤  

如果是iOS7以下材诽,請參照 6 來設(shè)置底挫,大概思路,先添加一個private的flag表明現(xiàn)在鍵盤是否存在脸侥,當(dāng)存在時建邓,通過 6 來獲取事件關(guān)閉鍵盤。

3. 鍵盤遮蓋了UIWebView

這個的解決方法可在 1 中的keyboardWillShow:里面操作睁枕,通過改變webView的origin來實現(xiàn)官边。

4. 鍵盤出現(xiàn)時UIWebView里面的Content內(nèi)容向上移動,以至聚焦的文本框超出了UIWebView的可視區(qū)域

在UIWebView中外遇,只要鍵盤出現(xiàn)注簿,UIWebView肯定會向上移動,至于合不合適就不好說了跳仿,如果不合適诡渴,就只用禁用自動移動。

5. 如何在鍵盤彈出時禁止UIWebView里面的Content向上移動

這個方法菲语,我也找了很久妄辩,但是還是找到了惑灵,感謝強(qiáng)大的網(wǎng)友,代碼如下:

@interface XXX : UIViewController<UIScrollViewDelegate> // 添加UIScrollViewDelegate眼耀, step 1  
      
    self.webView.scrollView.delegate = self; // 注冊代理泣棋, step 2  
      
    - (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView{ // 實現(xiàn)代理方法, step 3  
            return nil;  
    }
6. 如何在UIWebView中獲取點擊坐標(biāo)

眾所周知畔塔,UIWebView會吃掉所有的touch事件潭辈,不然也不會有那么多人費工夫弄javascript了,但是不能設(shè)置不代表不能以另外一種方式代替澈吨,大概思路:給webView的superView添加手勢把敢,然后通過實現(xiàn)多手勢過濾設(shè)置來實現(xiàn),為什么要設(shè)置多手勢過濾呢谅辣?我這里說明一下修赞,由于UIWebView默認(rèn)有自己的手勢,它會攔截掉你的手勢桑阶,以至 superView無法接收手勢柏副,代碼如下:

@interface XXX : UIViewController<UIGestureRecognizerDelegate> // 添加UIGestureRecognizerDelegate, step 1  
      
    // 添加手勢蚣录, step 2  
    UITapGestureRecognizer *webTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webTap:)];  
    webTap.numberOfTouchesRequired = 1;  
    webTap.numberOfTapsRequired = 1;  
    webTap.delegate = self;  
    webTap.cancelsTouchesInView = NO;  
    [self.view addGestureRecognizer:webTap];  
      
    // 設(shè)置過濾割择,ruturn YES為同時接收,至此手勢可以透過webView萎河,讓你的superView也可以接收到了荔泳, step 3  
    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{  
            return YES;  
    }  
      
    - (void)webTap:(UITapGestureRecognizer *)sender{  
            CGPoint tapPoint = [sender locationInView:self.webView.scrollView]; // 獲取相對于webView中的坐標(biāo),如果改成self.view則獲取相對于superView中的坐標(biāo)虐杯, step 4  
            NSLog(@"tapPoint x:%f y:%f",tapPoint.x,tapPoint.y);  
    }  

UIWebView鍵盤處理能想起的就只有這些了玛歌,歡迎大家補(bǔ)充。
轉(zhuǎn)載自:
http://blog.csdn.net/assholeu/article/details/38714123

資料參考:
感謝 http://blog.csdn.net/abel_tu/article/details/12134261

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擎椰,一起剝皮案震驚了整個濱河市支子,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌达舒,老刑警劉巖值朋,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異休弃,居然都是意外死亡吞歼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門塔猾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來篙骡,“玉大人,你說我怎么就攤上這事∨此祝” “怎么了尿褪?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長得湘。 經(jīng)常有香客問我杖玲,道長,這世上最難降的妖魔是什么淘正? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任摆马,我火速辦了婚禮,結(jié)果婚禮上鸿吆,老公的妹妹穿的比我還像新娘囤采。我一直安慰自己,他們只是感情好惩淳,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布蕉毯。 她就那樣靜靜地躺著,像睡著了一般思犁。 火紅的嫁衣襯著肌膚如雪代虾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天激蹲,我揣著相機(jī)與錄音棉磨,去河邊找鬼。 笑死托呕,一個胖子當(dāng)著我的面吹牛含蓉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播项郊,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斟赚!你這毒婦竟也來了着降?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤拗军,失蹤者是張志新(化名)和其女友劉穎任洞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體发侵,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡交掏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刃鳄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盅弛。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挪鹏,到底是詐尸還是另有隱情见秽,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布讨盒,位于F島的核電站解取,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏返顺。R本人自食惡果不足惜禀苦,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遂鹊。 院中可真熱鬧伦忠,春花似錦、人聲如沸稿辙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邻储。三九已至赋咽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吨娜,已是汗流浹背脓匿。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留宦赠,地道東北人陪毡。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像勾扭,于是被迫代替她去往敵國和親毡琉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • 在此特此聲明:一下所有鏈接均來自互聯(lián)網(wǎng)妙色,在此記錄下我的查閱學(xué)習(xí)歷程桅滋,感謝各位原創(chuàng)作者的無私奉獻(xiàn) ! 技術(shù)一點一點積...
    遠(yuǎn)航的移動開發(fā)歷程閱讀 11,092評論 12 197
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫身辨、插件丐谋、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 我是小六及老,一個陽光充滿正能量的大男孩郊艘。喜歡各種運動锭弊,健身晨汹,聽音樂斟叼,讀書对竣,寫字愈腾,擅長打乒乓球颜矿,長跑。是朋友圈里的運動...
    _小六閱讀 209評論 6 1
  • 2017 7.3 關(guān)系攻略 為人處世如何更進(jìn)一步 人際交往是我最為頭疼的一件事找岖,我是一個比較務(wù)實的人陨倡。做啥事習(xí)慣了...
    耕耘生活閱讀 525評論 2 9