2011-01-10 57 views
55

Tôi làm cách nào để tạo bàn phím/bàn phím tùy chỉnh sẽ hiển thị khi một số chạm vào một UITextField? Tôi muốn hiển thị một bàn phím với một, b, c, 1, 2, 3 và một nút nhập, không có gì khác. Bàn phím sẽ hoạt động và hoạt động giống như bàn phím tiêu chuẩn (trong hành vi) nhưng chắc chắn sẽ trông khác.Cách tạo bàn phím tùy chỉnh

Tôi không thể tìm thấy bất kỳ ví dụ nào và tốt nhất tôi tìm thấy là lọc các ký tự bằng bàn phím hiện có, đây là giải pháp không được chấp nhận.

+0

Tôi đã trả lời một câu hỏi rất giống nhau (được liên kết đến trong câu trả lời của tôi dưới đây: http://stackoverflow.com/a/13351686/937822) tạo một bàn phím tùy chỉnh. Tôi đã làm cho nó mã nguồn mở và đặt nó trên Github cho tất cả để sử dụng, và gần đây đã thêm một ví dụ với một bàn phím hex. Nếu bạn chỉ muốn a-c và 1-3, bạn chỉ cần xóa các nút bổ sung! – lnafziger

Trả lời

38

Tôi nghĩ rằng bạn đang tìm kiếm

khuôn khổ "Text, Web, and Editing Programming Guide for iOS" The UIKit bao gồm hỗ trợ cho quan điểm đầu vào tùy chỉnh và quan điểm phụ kiện đầu vào. Ứng dụng của bạn có thể thay thế chế độ xem đầu vào của riêng nó cho bàn phím hệ thống khi người dùng chỉnh sửa văn bản hoặc các dạng dữ liệu khác trong chế độ xem. Ví dụ: một ứng dụng có thể sử dụng chế độ xem đầu vào tùy chỉnh để nhập các ký tự từ bảng chữ cái chạy. Bạn cũng có thể đính kèm giao diện phụ kiện đầu vào vào bàn phím hệ thống hoặc chế độ xem đầu vào tùy chỉnh; chế độ xem phụ kiện này chạy dọc theo đầu chế độ xem đầu vào chính và có thể chứa các điều khiển ảnh hưởng đến văn bản theo một số cách hoặc nhãn hiển thị một số thông tin về văn bản.

Để có được tính năng này nếu ứng dụng của bạn đang sử dụng các đối tượng UITextView và UITextField để chỉnh sửa văn bản, chỉ cần gán các chế độ xem tùy chỉnh cho các thuộc tính inputView và inputAccessoryView. Những quan điểm tùy chỉnh được hiển thị khi đối tượng văn bản trở nên trả lời đầu tiên ...


này có thể đóng vai trò như một giới thiệu tốt: customizing the iOS keyboard

+1

Liên kết này hữu ích một nửa. Nó cho bạn biết tất cả về khả năng tạo bàn phím tùy chỉnh và danh mục lớp chấp nhận văn bản của bạn phải tuân theo để chấp nhận đầu vào từ bàn phím tùy chỉnh ... nhưng cho bạn hầu như không biết cách xây dựng tùy chỉnh chính bàn phím. Một liên kết đến một số mã ví dụ sẽ rất hữu ích. –

+0

@Robert, bạn nói đúng. Tôi không tìm được câu trả lời và bỏ cuộc. Hãy cho tôi biết nếu bạn tìm thấy một giải pháp. – HM1

+2

Tôi đặt cùng một ví dụ cơ bản về việc triển khai một vài trường hợp mà bạn có thể muốn tùy chỉnh chế độ xem đầu vào, hy vọng đó là một số trợ giúp. Xem câu trả lời cập nhật. – Jonah

3

Trước hết tạo ra một cái nhìn (tôi đã làm nó trong một riêng biệt nib file và nạp nó theo cách này):

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView" 
                owner:self 
               options:nil]; 
    keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0]; 

Sau đó, tôi đặt nó như là cái nhìn đầu vào cho các trường văn bản nơi mà tôi muốn sử dụng nó (và trên thực tế, đây là trả lời ngắn gọn cho câu hỏi của bạn;)) :

[self.propertyEditor setInputView:keyBView]; 

Khi nhấp vào trường tôi làm di chuyển các pup view (nếu cần thiết) để không bao gồm lĩnh vực:

CGRect textFieldRect = [self.tableViewController.view.window convertRect:propertyEditor.bounds fromView:propertyEditor]; 
CGRect viewRect = [self.tableViewController.view.window convertRect:self.tableViewController.view.bounds fromView:self.tableViewController.view]; 
CGFloat midLine = textFieldRect.origin.y+.5*textFieldRect.size.height; 

CGFloat numerator = midLine - viewRect.origin.y - MINIMUM_SCROLL_FRACTION*viewRect.size.height; 
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)*viewRect.size.height; 
CGFloat heightFraction = MIN(1, MAX(0, numerator/denominator)); 

animateDistance = floor(PORTRAIT_USER_INPUT_VIEW_HEIGHT*heightFraction); 

CGRect viewFrame = self.tableViewController.view.frame; 
viewFrame.origin.y -= animateDistance; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; 
[self.tableViewController.view setFrame:viewFrame]; 
[UIView commitAnimations]; 

Khi chỉnh sửa xong, tôi làm di chuyển nhìn xuống:

 CGRect viewFrame = self.tableViewController.view.frame; 
     viewFrame.origin.y += animateDistance; 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; 
     [self.tableViewController.view setFrame:viewFrame]; 
     [UIView commitAnimations]; 

Các khó khăn tôi sử dụng được thiết lập như sau:

static const CGFloat USER_INPUT_ANIMATION_DURATION = 0.3; 
static const CGFloat PORTRAIT_USER_INPUT_VIEW_HEIGHT = 180; 

static const CGFloat MINIMUM_SCROLL_FRACTION = 0.1; 
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.2; 
+0

Guys bất kỳ cải thiện về câu hỏi này, vì một số bạn đã thực hiện một số nghiên cứu (và có thể đã tìm thấy một giải pháp), xin vui lòng gửi nếu bạn đã tìm thấy một cái gì đó hữu ích…. –

2

Thật không may, "Hướng dẫn lập trình văn bản, web và chỉnh sửa cho iOS" được tham chiếu ở trên không cung cấp bất kỳ thông tin nào về việc cần làm với ký tự khi bạn bấm một phím. Đây là một phần khó khăn khi triển khai bàn phím trong iOS.

Tôi đã tạo một ví dụ làm việc đầy đủ về bàn phím số hex có thể dễ dàng được tùy chỉnh theo ý bạn.

Chi tiết cụ thể là tại câu trả lời khác của tôi về chủ đề này: https://stackoverflow.com/a/13351686/937822

2

Bạn muốn thiết lập giá trị cho

inputView 

trên UITextField của bạn. Bạn sẽ cần triển khai đầy đủ bàn phím hoặc cơ chế nhập mới trong chế độ xem bạn cung cấp.

Cách khác,

inputAccessoryView 

có thể được sử dụng để thêm một lượng nhỏ các chức năng. Chế độ xem sẽ được đặt phía trên bàn phím hệ thống và sẽ đến và bị loại bỏ cùng với nó.

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