2009-09-03 19 views
12

Tôi hiện đang phát triển trò chơi OpenGL ES dành cho iPhone và iPod touch.Làm thế nào để kéo lên một UIKeyboard mà không có một UITextField hoặc UITextView?

Tôi đã tự hỏi làm thế nào tôi có thể dễ dàng kéo UIKeyboard lên? chính thức, được ghi lại tài liệu khả năng để kéo lên UIKeyboard mà không cần sử dụng UITextField của UITextView không?

+0

bản sao có thể có của [Cách hiển thị bàn phím iPhone/iPad trên toàn màn hình ứng dụng OpenGL ES] (http://stackoverflow.com/questions/7253477/how-to-display-the-iphone-ipad-keyboard- over-a-full-screen-opengl-es-app) – JosephH

Trả lời

14

Nó không phải là "chính thức" có thể - bạn không thể truy cập đối tượng UIKeyboard ở tất cả trong khi ở trong các nguyên tắc của Apple.

Tạo UITextField vô hình, sau đó gọi [textField becomeFirstResponder] sẽ thực hiện công việc - bạn thậm chí có thể phân lớp UITextField trước, sau đó ghi đè phương thức ủy nhiệm textField:shouldChangeCharactersInRange: để chuyển hướng nhập văn bản đến nơi bạn muốn.

+0

Xem thêm câu trả lời cập nhật từ @john bằng cách sử dụng 3.2+ API –

+2

__Câu trả lời này hiện sai. [Xem ở đây để biết ví dụ về cách thực hiện] (http://stackoverflow.com/questions/7253477/how-to-display-the-iphone-ipad-keyboard-over-a-full-screen-opengl-es- ứng dụng) – bobobobo

0

Tôi chưa thử nhưng http://www.cocoadev.com/index.pl?UIKeyboard hiển thị một số mã có vẻ như nó sẽ hoạt động.

+1

Tôi không nghĩ rằng UIKeyboard chính thức được hiển thị trong SDK, vì vậy có lẽ là "hợp pháp", bạn phải sử dụng UITextField ẩn. –

+0

@David - Vì vậy, nó không thể sau đó? – Kriem

+0

Mã bạn đã đăng không hoạt động. Mặc dù nó có thể hợp lệ, trình biên dịch sẽ cho bạn biết rằng bạn không thể truy cập lớp 'UIKeyboard'. – FreeAsInBeer

1

tôi hiển thị bàn phím mà không cần bất kỳ UITextField có thể nhìn thấy bằng cách định vị khung textfield tôi ra khỏi màn hình hiển thị:

#define TEXT_FRAME     -50,-50,0,0 

self.textField = [[UITextField alloc] initWithFrame:CGRectMake(TEXT_FRAME)]; 

Khi tôi đặt "trả lời đầu tiên" bàn phím trở nên rõ ràng mà không cần bất kỳ khu vực đầu vào có thể nhìn thấy:

// show the keyboard  
[self.textField becomeFirstResponder]; 

Sau đó tôi đã xóa ý tưởng. Tuy nhiên, tôi không biết sự phù hợp của nó với các hướng dẫn của Apple.

19

Nếu bạn phân lớp UIResponder và khai báo giao thức UIKeyInput, bàn phím sẽ xuất hiện khi bạn trở thành người đầu tiên trả lời.

Xem UIKeyInput protocol here.

Có một điều khiến tôi băn khoăn là bạn cần ghi đè thông báo canBecomeFirstResponder.

+1

Chỉ các lớp con 'UIView', không chỉ là lớp con UYesponder _any_. Tôi đã cố gắng để làm cho phân lớp AppDelegate của tôi (một UIResponder), hiển thị một bàn phím và thất bại. – paulvs

+0

Sau phân lớp 'UIView', sự khác nhau giữa' UITextfield' là gì? tất cả chúng đều phải được thêm vào màn hình, sau đó trở thành người trả lời đầu tiên, hiển thị bàn phím. – al03

3

Thực sự là có thể. Bản thân tôi đã phải vật lộn rất nhiều với điều này. Giao thức UIKeyInput có thể được sử dụng để kéo bàn phím mà không cần sử dụng UITextField hoặc UITextView. Tuy nhiên, nó chỉ có sẵn trong iOS 3.2 trở lên. Đây là một số tutorial.

Hy vọng điều đó sẽ hữu ích.

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