2011-10-25 69 views
1

我最近添加了一個js的觸摸映射函數(在這裏找到,在stackoverflow的某處)我的網頁之一,所以我可以讓我的JQuery的可拖動工作在iOS Safari(拖放沒有這個映射將無法正常工作,據我所看到的)觸摸映射和輸入焦點與移動與Javascript

這是函數:

function touchHandler(event) 
{ 
var touches = event.changedTouches, 
    first = touches[0], 
    type = ""; 

    switch(event.type) 
{ 
    case "touchstart": type = "mousedown"; break; 
    case "touchmove": type="mousemove"; break;   
    case "touchend": type="mouseup"; break; 
    default: return; 
} 
altKey, shiftKey, metaKey, button, relatedTarget); 

var simulatedEvent = document.createEvent("MouseEvent"); 
simulatedEvent.initMouseEvent(type, true, true, window, 1, 
          first.screenX, first.screenY, 
          first.clientX, first.clientY, false, 
          false, false, false, 0, null); 

first.target.dispatchEvent(simulatedEvent); 
event.preventDefault(); 
} 

一切都運行得很好......除非我焦點的輸入或文本域(Facebook的評論插件,特別是)和iOS鍵盤顯示。

當我輸入我的文本並點擊輸入上方的「發送」按鈕後,該函數給模擬鼠標事件提供了錯誤的Y座標(我相信這是因爲鍵盤改變了頁面的高度),並最終點擊按鈕上方的某處。

輸入模糊,但發送按鈕不會被點擊。就好像這還不夠可怕,頁面上的另一個按鈕(發送者上方的某些像素)會被點擊並鏈接到另一個頁面。

我以爲我可以禁用映射時,輸入成爲焦點,但似乎Facebook的評論插件元素根本無法訪問。

任何幫助表示讚賞,我一直在努力解決這個現在天...

回答

1

有你的UIView起到推動你內容顯示鍵盤時?

- (void)textFieldDidEndEditing:(UITextField *)textField { 
     [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
     textfield.frame = CGRectMake(textfield.frame.origin.x, (textfield.frame.origin.y + 100.0), textfield.frame.size.width, textfield.frame.size.height); 
    [UIView commitAnimations]; 
    } 

它現在將它從原點移動100個,如果你的元素需要它,你可以改變它。完成輸入文本後,您還必須添加代碼以從視圖中刪除鍵盤。

 - (void)textFieldDidEndEditing:(UITextField *)textField { 
      [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
textfield.frame = CGRectMake(textfield.frame.origin.x, (textfield.frame.origin.y + 100.0), textfield.frame.size.width, textfield.frame.size.height); 
     [UIView commitAnimations]; 

}