2011-11-03 5 views
5

Przede wszystkim wiem, że contenteditable to tylko iOS 5 Rozliczyłem to - dajemy użytkownikom z iOS 5 funkcję pozwalającą na wklejanie Rich Text za pomocą contenteditable. Ta funkcja działa świetnie, a teraz wszystko, co chcę zrobić, to wtedy, gdy widok wydaje się ustawiać aktywne pole contented (pre-select it), tak aby pojawiła się klawiatura i użytkownik może zacząć pisać od razu. Oto lokalny plik html używam do UIWebViewJak wstępnie zaznaczać pole contenteditable w UIWebView iOS5

<html> 
    <body> 
     <div id="content" contenteditable="true" style="font-family: Helvetica">PLACEHOLDER</div> 
    </body> 
</html> 

już próbował przy użyciu niektórych javascript, aby to osiągnąć za pomocą tutoriali, które znalazłem na wstępnej selekcji do wprowadzania tekstu. Nie mogłem tego uruchomić, nawet gdy próbowałem przejść do pola wprowadzania tekstu do testowania. Jest to prawdopodobnie spowodowane moim brakiem doświadczenia z javasciptem, więc jeśli to jest rozwiązanie, prosimy o wyraźne wyrażenie (ponieważ jestem całkowicie obeznany z javascript).

Dzięki za wszelką pomoc

Odpowiedz

4

Niestety nie można tego zrobić w Mobile Safari. Sądzę, że Apple zdecydowało się ograniczyć to zjawisko, ponieważ podczas odwiedzania niektórych witryn, na przykład Google, pole wyszukiwania natychmiast się koncentruje. Byłoby to bardzo irytujące dla użytkowników, gdyby każda strona, do której się udawali, pojawiała się na klawiaturze. Na komputerze to zachowanie nie ma znaczenia, ale na urządzeniach mobilnych jest bardzo zauważalne.

pokrewne: Mobile Safari Autofocus text field

+0

Dzięki, to jest to, co podejrzewałem - ale chciałem się upewnić. – xizor

0

nie mam informacji o contenteditable na iOS, ale myślę, że powinieneś być w stanie po prostu stworzyć zakres i dodać je do wyboru.

+1

działa to w nowoczesnych przeglądarkach komputerowych. ale nie na mobilnym safari od iOS 5. –

+0

Dobrze wiedzieć :) –

2

Można przywołać klawiaturę jeśli jesteś w kontekście procedury obsługi zdarzenia kliknięcia.

Na przykład

document.body.addEventListener('click', function() { 
    content.focus(); 
}, false); 

powinien działać

+0

To działa! Rzeczywiste zachowanie jest nieco bardziej permisywne niż to (są inne okazje/zdarzenia, które pozwalają skupić się na contentEditable), ale jest to tak dziwaczne i nieprzewidywalne, że naprawdę nie jest warte dokumentowania. – aaaidan

7

Teraz, jeśli ktoś chce to osiągnąć w iOS 6, nie może otworzyć iOS klawiaturę programowo tak,

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    // keyboardDisplayRequiresUserAction available in iOS >= 6 
    if ([webView respondsToSelector:@selector(setKeyboardDisplayRequiresUserAction:)]) { 
     webView.keyboardDisplayRequiresUserAction = NO; 
    } 
} 

a następnie

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    // Assuming that you're using jquery. If not, use document.getElementById('YourInputElementID') 
    NSString *evalStr = [NSString stringWithFormat:@"setTimeout(function(){$('#YourInputElementID').focus();},1000);"]; 
    [webView stringByEvaluatingJavaScriptFromString:evalStr]; 
} 

Spowoduje to uruchomienie javascript po 1sec. Po stronie bezpieczeństwa powinieneś zadzwonić po kod fokusu, gdy element skupienia został załadowany.

+0

Działa bardzo ładnie, ty. –

+0

Ustawienie 'keyboardDisplayRequiresUserAction' w InterfaceBuilder nie działało dla mnie, ale dodanie go do kodu naprawiło to. Jeśli powyższy kod nie działa dla kogoś czytającego, upewnij się, że właściwość jest faktycznie ustawiona w czasie wykonywania. – tharkay