2011-11-03 9 views
5

Trước hết tôi biết có thể chỉnh sửa được chỉ iOS 5 Tôi đã tính toán điều này - chúng tôi đang cung cấp cho người dùng iOS 5 một tính năng cho phép dán văn bản phong phú bằng cách sử dụng contenteditable. Tính năng này hoạt động tuyệt vời cho đến giờ tất cả những gì tôi muốn làm là khi khung nhìn xuất hiện để đặt trường có thể chỉnh sửa thành hiện hoạt (chọn trước nó) để bàn phím xuất hiện và người dùng có thể bắt đầu nhập ngay lập tức. Đây là tệp html cục bộ tôi đang sử dụng cho UIWebViewLàm thế nào để chọn trước trường có thể chỉnh sửa trong UIWebView iOS5

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

Tôi đã thử sử dụng một số javascript để thực hiện việc này bằng cách sử dụng các hướng dẫn mà tôi tìm thấy để chọn trước kiểu nhập văn bản. Tôi không thể làm việc này, ngay cả khi tôi cố gắng chuyển sang trường nhập văn bản để thử nghiệm. Điều này có lẽ là do tôi thiếu kinh nghiệm với javascipt vì vậy nếu đó là giải pháp xin được rõ ràng (như tôi hoàn toàn không quen thuộc với javascript).

Nhờ sự giúp đỡ

Trả lời

4

Rất tiếc, bạn không thể làm điều đó trong Mobile Safari. Tôi tin rằng Apple đã chọn để hạn chế điều này xảy ra bởi vì khi bạn truy cập một số trang web, chẳng hạn như Google chẳng hạn, trường tìm kiếm sẽ được tập trung ngay lập tức. Điều này sẽ cực kỳ khó chịu cho người dùng nếu mọi trang web họ truy cập, bàn phím bật lên. Trên máy tính, hành vi này không quan trọng nhưng trên thiết bị di động, nó rất đáng chú ý.

liên quan: Mobile Safari Autofocus text field

+0

Cảm ơn, đó là điều tôi nghi ngờ - nhưng tôi muốn chắc chắn. – xizor

0

Tôi không có thông tin về contenteditable trên iOS nhưng tôi nghĩ rằng bạn sẽ có thể chỉ đơn giản là tạo ra một phạm vi và thêm nó vào vùng chọn.

var input; // your contenteditable element 
var range = document.createRange(); 
range.selectNodeContents(input); 

var sel = window.getSelection(); 
sel.removeAllRanges(); 
sel.addRange(range); 
+1

tính năng này hoạt động trên các trình duyệt dành cho máy tính để bàn hiện đại. nhưng không trên safari di động như iOS 5. –

+0

điều cần biết :) –

2

Bạn có thể triệu tập các bàn phím nếu bạn đang ở trong bối cảnh của một xử lý sự kiện nhấp chuột.

Ví dụ

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

nên làm việc

+0

Tính năng này hoạt động! Các hành vi thực tế là hơi dễ dãi hơn này (có những dịp khác/sự kiện cho phép bạn tập trung một contentEditable), nhưng nó rất bizzare và không thể đoán trước nó không thực sự có giá trị tài liệu. – aaaidan

7

Bây giờ nếu có ai muốn đạt được điều này trong iOS 6, ông có thể mở iOS bàn phím lập trình như thế này,

- (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; 
    } 
} 

và sau đó,

- (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]; 
} 

Điều này sẽ chạy javascript này sau 1 giây. Đối với mặt an toàn, bạn nên gọi mã lấy nét khi phần tử lấy nét đã được nạp.

+0

Hoạt động rất đẹp, ty. –

+0

Đặt 'keyboardDisplayRequiresUserAction' trong InterfaceBuilder không hoạt động đối với tôi, nhưng thêm nó vào mã cố định nó. Nếu mã ở trên không hoạt động đối với người đọc, hãy đảm bảo rằng thuộc tính thực sự được đặt ở thời gian chạy. – tharkay