2012-04-10 47 views
4

我嘗試使用「正常」滾動操作來獲取可編輯內容UIWebView,以便當文本光標將被鍵盤隱藏時,滾動以防止出現該滾動。我從iOS developer library閱讀了「管理鍵盤」文檔,但沒有得到任何結果,使用我的UIWebView的scrollView屬性。我還在網上發現了很多技巧,使用ScrollView屬性/方法或javascript命令,但無法獲得正常的滾動操作,例如,像MacOS上的任何NSTextView一樣。你知道這個問題的解決方案嗎?管理UIWebView中的垂直滾動

[EDITED]得到了解決方案,並創建了一個由NSTimer發起的方法。要得到插入符號Y的位置,應該選擇活動元素,並插入一個虛擬節點。然後獲取node.offsetTop屬性給出了該caretY。不要忘了刪除節點...

+3

嗨丹尼斯,你能否給出一個更詳細的解決方案,你已經做了什麼?我也面臨UIWebView的麻煩,內容可編輯和不穩定的滾動行爲。 – 2012-04-19 19:30:51

+1

僅供參考:您可以自己填寫答案並接受它:) – Chad 2012-06-21 14:31:44

回答

0

好吧,這裏是蘋果確實在他們的實例的方式(我已經不記得這是什麼項目名稱):

1.You鍵盤通知寄存器(鍵盤發出的通知每次都顯示出來,或者被隱藏):

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWasShown:) 
              name:UIKeyboardDidShowNotification object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillBeHidden:) 
              name:UIKeyboardWillHideNotification object:nil]; 

2.註冊鍵盤的大小(你有興趣的高度),並滾動,如果該點在視圖中不包含:

- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 

NSDictionary* info = [aNotification userInfo]; 
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    // If active text field is hidden by keyboard, scroll it so it's visible 
CGRect aRect = self.view.frame; 
aRect.size.height -= kbSize.height; 

CGPoint point; 

point = CGPointMake(0, activeTextField.frame.origin.y + activeTextField.frame.size.height); 

if (!CGRectContainsPoint(aRect, point)) 
{ 
    CGPoint scrollPoint = CGPointMake(0.0, activeTextField.frame.origin.y+activeTextField.frame.size.height-kbSize.height); 
    [scrollView setContentOffset:scrollPoint animated:YES]; 
} 

不要忘記在隱藏鍵盤時做相反的事情,如果推到另一個視圖控制器,請移除觀察者。 本示例與UIScrollView上的文本字段一起使用,但我相信您可以輕鬆調整它。

就個人而言,如果我也管理網絡端,我更喜歡創建320px寬的網頁,設置我的webView sizeToFit,將它添加到UIScrollView的頂部並從那裏管理滾動。對於textFields,我只需使用javascript獲取所選textField的容器並獲取其座標。