2011-08-31 70 views
18

Tôi đang làm việc trên một ứng dụng mà tại một số điểm yêu cầu đầu vào bàn phím. Ứng dụng của tôi sử dụng OpenGL ES để hiển thị và tôi có khung đồ họa của riêng mình có thể hiển thị trường văn bản và biết cách quản lý con trỏ và hiển thị văn bản. Mã này hoạt động tốt trên các nền tảng khác có bàn phím thực, chẳng hạn như Windows và OS X.Cách hiển thị bàn phím iPhone/iPad trên toàn màn hình Ứng dụng OpenGL ES

Tất cả những gì tôi cần để phiên bản iOS của ứng dụng hoạt động là có thể đưa bàn phím lên xuống theo chương trình và để có được các sự kiện nhấn phím từ người dùng vào chế độ xem của tôi để tôi có thể định tuyến chúng vào hệ thống sự kiện riêng của khung công tác của tôi.

Tôi đã thấy this question, nhưng tôi không thể đưa ra giải pháp được mô tả ở đó. Không chắc chắn nếu đó là vì tôi đang làm điều gì đó sai, hoặc bởi vì nó không hoạt động trên các bản phát hành iOS hiện tại.

EDIT: Sẽ hữu ích nếu bạn chỉ vào ứng dụng đang hoạt động với mã nguồn tạo ra bất kỳ phần tử giao diện người dùng nào lập trình và hiển thị nó trên đầu màn hình GL ES. Tôi nghĩ tôi có thể tìm ra phần còn lại nếu tôi hiểu được phần đó.

+0

Bạn không thể làm cho nó hoạt động theo nghĩa nào? Bàn phím không xuất hiện, bạn không thể chuyển hướng nhập văn bản (điều này sẽ được thực hiện tốt hơn với đại biểu, nhân tiện) hoặc cái gì khác? Bạn có thể hiển thị mã liên quan đến UITextField của mình không? – Tommy

+0

Vấn đề là bàn phím không xuất hiện, chính xác. Nếu tôi làm cho UITextField hiển thị thay vì ẩn tôi cũng không nhìn thấy nó trên màn hình GL của tôi. – Miguel

+0

Bạn đang sử dụng khung đồ họa nào để hiển thị trường văn bản? –

Trả lời

22

tôi không thể chỉ cho bạn một ví dụ làm việc, nhưng tôi tin rằng những gì bạn đang tìm kiếm là đây http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKeyInput_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIKeyInput

Ý tưởng cơ bản là bạn thực hiện các giao thức UIKeyInput trên một đối tượng UIResponder, chẳng hạn như một UIView . Làm cho khung nhìn đầu tiênResponder và bàn phím sẽ tự động xuất hiện. Giao thức UIKeyInput cung cấp cho bạn phản hồi đơn giản để chèn ký tự và xóa ký tự khi người dùng nhấn các nút trên bàn phím.

Đây không phải là mã làm việc, nhưng nó sẽ giống như thế này:

@interface MyKeyboardView : UIView <UIKeyInput> 
@end 

@implementation MyKeyboardView 
- (void)insertText:(NSString *)text { 
    // Do something with the typed character 
} 
- (void)deleteBackward { 
    // Handle the delete key 
} 
- (BOOL)hasText { 
    // Return whether there's any text present 
    return YES; 
} 
- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 
@end 

khi xem được attched, làm cho nó trả lời đầu tiên cho thấy bàn phím

[myView becomeFirstResponder]; 

hoặc từ chức người trả lời đầu tiên để loại bỏ bàn phím

[myView resignFirstResponder]; 

Chỉnh sửa: đảm bảo chế độ xem của bạn được đính kèm với vi ew phân cấp hoặc điều này có lẽ sẽ không làm bất cứ điều gì.

+0

Cảm ơn, tôi sẽ thử. Vì tôi có một cái nhìn duy nhất trong ứng dụng của mình, tôi cho rằng nó đã là người trả lời đầu tiên. Tôi đã được caling trở thànhFirstResponder trên lĩnh vực văn bản, mà là một đứa trẻ của xem. Có lợi ích trong việc tạo ra một cái nhìn thứ hai chỉ cho điều này? – Miguel

+3

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn. Tôi đã quản lý để có được bàn phím để bật lên theo lời khuyên của bạn. Một chi tiết mà bạn đã bỏ lỡ có thể không rõ ràng (ít nhất là nó không dành cho tôi) là UIView theo mặc định sẽ không trở thành trả lời đầu tiên, bạn phải thực hiện canBecomeFirstResponder và trả lại YES từ nó để kích hoạt tính năng đó. – Miguel

+0

Tôi không chắc liệu có lợi ích đáng kể khi sử dụng chế độ xem thứ hai để xử lý bàn phím hay không, nhưng có lẽ nếu bạn đang cố gắng xử lý các sự kiện khác trong cùng một chế độ xem (sự kiện chạm) kiểm soát chuỗi trả lời. –

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