2012-05-25 28 views
12

Chúng tôi đang sử dụng PhoneGap để phát triển ứng dụng di động của chúng tôi, và chúng tôi mượn mã từ đây để loại bỏ các màu đen bên cạnh/trước/thực hiện thanh từ bàn phím:PhoneGap: hoàn toàn loại bỏ các thanh màu đen từ bàn phím iPhone

https://stackoverflow.com/a/9276023/35364

Mã nào tìm thấy thanh màu đen, dưới dạng đối tượng UIView và gọi 'removeFromSuperview' trên đó.

Chúng tôi không quen thuộc với iOS SDK/API. Vì vậy, trong khi chúng ta có thể nhìn vào mã và nhận được một ý tưởng về những gì nó đang làm, chúng tôi không thể nói nếu nó làm đúng cách, hoặc làm thế nào để cải thiện nó.

Các vấn đề cụ thể chúng tôi đang chạy vào:

Chúng tôi có một trường văn bản để viết một tin nhắn, và chúng tôi đang tự kiểm soát các vị trí của lĩnh vực này để được chính xác phía trên bàn phím, tương tự như sms mẹ đẻ ứng dụng. Nói cách khác, chúng tôi đang đặt nó ở nơi thanh màu đen được cho là.

Khi chúng tôi tập trung/nhập vào trường tin nhắn, hệ thống sẽ đẩy chế độ xem lên. Có vẻ như đây là một cơ chế để đảm bảo rằng trường văn bản không bị ẩn khi người dùng gõ vào nó.

Điều này xảy ra ngay cả khi trường văn bản hiển thị.

Tôi nhận thấy rằng bằng cách đặt trường nhập ngay phía trên nơi thanh màu đen bình thường (ngược với phía sau nó), chế độ xem không cuộn.

Vì vậy, có vẻ như hệ thống bằng cách nào đó cho rằng thanh màu đen vẫn còn đó!

(Để kiểm tra lại: khi thanh màu đen không bị xóa và chúng tôi đặt trường văn bản ngay phía trên nó, chúng ta có thể lấy nét và nhập vào, và chế độ xem sẽ không cuộn).

Vì vậy, câu hỏi là:

Tại sao "hệ thống" đẩy nội dung lên khi chỉnh sửa một văn bản lĩnh vực đó là đúng nơi "đằng sau", nơi các thanh màu đen được coi là? Có phải vì thanh màu đen chưa được xóa hoàn toàn chưa? Chúng ta có cần phải làm một cái gì đó để "hoàn toàn" loại bỏ thanh màu đen? Chúng ta có cần buộc iOS tính toán lại kích thước của bàn phím không? hay chính xác thì sao?

Cơ chế này (đẩy chế độ xem) được triển khai bởi UIWebView của iOS hay bằng Phonegap?

Có ứng dụng nào trên điện thoại đã giải quyết được sự cố này không?

Trả lời

9

thay

[subviewWhichIsPossibleFormView removeFromSuperview]; 

với

UIScrollView *webScroll = [webView.subviews lastObject]; 
CGRect newFrame = webScroll.frame; 

float accesssoryHeight = subviewWhichIsPossibleFormView.frame.size.height; 
newFrame.size.height += accesssoryHeight; 

[subviewWhichIsPossibleFormView removeFromSuperview]; 
[webScroll setFrame:newFrame]; 

nó thay đổi kích thước xem nội dung cuộn cho khoảng không gian phụ kiện còn thiếu. Nó là như xa sử dụng "tư nhân API" như mã khác. Cụ thể, nó không sử dụng API riêng tư trực tiếp nhưng nếu Apple quyết định thay đổi cách hiển thị một khung nhìn (trong trường hợp này là Bàn phím và WebView) thì nó sẽ sụp đổ.
Ví dụ: nếu họ đổi tên UIWebFormAccessory, mã của bạn sẽ không hoạt động nữa.

EDIT:
trên iOS 5.0+ bạn có thể gọi trực tiếp webView.scrollView. Vì vậy, bạn có thể chia nhỏ các mã có sẵn iOS 5 dự phòng:

UIScrollView *webScroll; 
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) { 
    webScroll = webView.scrollView; 
} else { 
    webScroll = [webView.subviews lastObject]; // iOS 2.x (?) - 4.x 
    // make sure this code runs appropriate on older SDKs 
} 
+0

Cảm ơn, điều này có vẻ như nó có thể làm việc. Một điều mặc dù tôi không chắc chắn 'webb' được cho là như thế nào. Tôi đã thử 'UIScrollView * webScroll = [self.webView.subviews lastObject];' nhưng điều đó dường như không hoạt động. – hasen

+0

ups yeah đó là webView tạm thời của tôi, một 'IBOutlet'. Nhưng nó sẽ hoạt động như bạn đã thử. Vui lòng 'NSLog (% @, self.webView.subviews)'. Có lẽ bạn có nhiều bản xem trước, tôi chỉ có một (scrollView) –

+0

Tôi nghĩ 'self.webView.scrollView' cũng sẽ hoạt động. – hasen

0

này đã làm việc cho tôi: https://github.com/don/KeyboardToolbarRemover

Bạn sẽ phải biết mặc dù, không có tập tin Cordova.plist như của PhoneGap 2.3. 0 - thay vì chỉnh sửa tập tin XML cấu hình của bạn với những điều sau:

<plugin name="KeyboardToolbarRemover" value="KeyboardToolbarRemover" /> 

tại các chi nhánh

Các vấn đề liên quan