2012-01-09 36 views
18

Tôi đang xây dựng một ứng dụng có giao diện tùy chỉnh để nhập văn bản và đang sử dụng UILabel để hiển thị. Sau đó nó đã trở thành cần thiết cho người dùng để có thể sao chép và dán văn bản, vì vậy tôi đã đi với một UITextField.Chức năng UITextField không có bàn phím

Vấn đề tôi có là tôi không thể tìm ra cách để UITextField cho phép lựa chọn, sao chép, dán, vv, nhưng không có bàn phím được hiển thị khi trường được chọn.

Tôi đã đọc nhiều bài đăng tương tự như vậy nhưng không hỏi chính xác điều tương tự, cũng như không làm bất kỳ giải pháp nào phù hợp với tôi. Tôi đã cố gắng làm cho trường không thể chỉnh sửa, điều này sẽ chặn bàn phím xuất hiện, nhưng cũng không cho phép sao chép và dán. Tôi cũng đọc các ý kiến ​​cho thấy subclassing UITextField, nhưng không có gì tôi đã đọc đã đưa ra các ví dụ cụ thể.

Tôi có thể làm gì đơn giản, hoặc tôi có cần đi tuyến đường tạo chế độ xem tùy chỉnh cho bàn phím hay các tùy chọn khác không?

Cảm ơn, Andrew

Giải pháp:

Cuối cùng, tôi phát hiện ra khác (nhưng không chính xác) câu hỏi tương tự ở đây trên stackoverflow, và một câu trả lời đã đưa ra một giải pháp cho vấn đề của tôi. Cách để đi về nó chỉ đơn giản là có ứng dụng hiển thị một giả Xem như bàn phím, và mọi thứ khác hoạt động theo cách cần.

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

Nó hoạt động cho UITextField và UITextView và chúng cần được đặt thành có thể chỉnh sửa.

Trả lời

24

Giải pháp:

Cuối cùng, tôi phát hiện ra khác (nhưng không chính xác) câu hỏi tương tự ở đây trên stackoverflow, và một câu trả lời đã đưa ra một giải pháp cho vấn đề của tôi. Cách để đi về nó chỉ đơn giản là có ứng dụng hiển thị một giả Xem như bàn phím, và mọi thứ khác hoạt động theo cách cần.

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

Nó hoạt động cho UITextFieldUITextView và chúng cần được đặt thành có thể chỉnh sửa.

+0

Nếu bạn làm điều này trong iOS 7, bạn sẽ nhận được một dòng trắng như câu hỏi này http://stackoverflow.com/questions/20946524/white-line-on-the-bottom-on-ios-7-with-uitextfield .Do bạn biết giải pháp cho nó? – deltaaruna

+1

Có vẻ như ai đó đã trả lời câu hỏi đó, cho thấy rằng rect 1 pixel là vấn đề, và điều này có thể giải quyết nó: CGRectMake (0, 0, 0, 0). –

+0

U có thể sử dụng [UIView mới] để tạo chế độ xem có khung không. – Dren

1

Biến nó thành UITextView và làm cho UITextView không thể chỉnh sửa được. Điều đó vẫn sẽ cho phép sao chép.

EDIT: Vâng xấu của tôi, tôi quên phần đó ... Về cơ bản những gì bạn đã làm là tạo một nhãn có thể cuộn được.

Nếu bạn muốn tất cả chức năng không có bàn phím, bạn cần phải chỉnh sửa và chỉnh sửa UITextFieldDelegate's -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField thành return NO. Thao tác này sẽ chặn bàn phím xuất hiện.

+1

Cảm ơn. Điều đó đã làm các trick. Nhiều đánh giá cao sau rất nhiều tìm kiếm và không có gì tôi có thể tìm thấy để chỉ ra UITextView sẽ tốt hơn. –

+0

Khi tôi lần đầu tiên thực hiện điều này, tôi nghĩ rằng nó là okay. Bây giờ, tuy nhiên, khi tôi nhìn lại, tôi chỉ có thể sao chép. Không được phép dán, có thể vì đó là bản chỉnh sửa. Bất kỳ suy nghĩ nào khác? –

+0

Đã chỉnh sửa ở trên ... – DGund

9

Mã này của tác giả ...

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];  
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor 

(đâu VIN 'là biến UITextField, và mã này được đặt trong một nơi như viewDidLoad)

... không làm việc để ngăn chặn iPhone/Bàn phím bật lên iPad sẽ được hiển thị.

BAO GIỜ, đó chỉ là phần 'hiển thị' của giao diện bàn phím. Nếu bạn có bàn phím gắn ngoài như bàn phím iPhone/iPad vật lý của Apple cắm vào pin 30 inch hoặc một trong số bàn phím hỗ trợ Bluetooth (hoặc thậm chí sử dụng bàn phím Mac với trình mô phỏng), người dùng vẫn có thể nhập vào trường KHÔNG CÓ hiển thị popup bàn phím hiển thị.

Ngoài ra, ngay cả khi không có cửa sổ bật lên bàn phím được hiển thị, người dùng vẫn có thể PASTE từ bảng dán vào trường bằng cách chạm đúp vào trường và chọn PASTE.

Mã BỔ SUNG sau ngăn chặn những bàn phím từ đang được sử dụng và ngăn ngừa PASTE cũng như:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSLog(@"myXViewController shouldChangeCharactersInRange"); 
    return FALSE; 
} 

...và vẫn cho phép lựa chọn, nhưng không cho phép chỉnh sửa văn bản trong trường.

+1

Điểm tốt về bàn phím ngoài - chắc chắn là cần cân nhắc trong một số trường hợp. Đối với chức năng Dán, đó là toàn bộ điểm của câu hỏi - để ẩn bàn phím và vẫn cho phép các chức năng sao chép/dán. –

+0

Cảm ơn, ** Ở đâu 'VIN' là biến UITextField và mã này được đặt ở đâu đó như viewDidLoad) ** !! – rptwsthi

0

Tôi đang sử dụng [textfield resignFirstResponder] trong phương pháp đại biểu - (void)textFieldDidBeginEditing:(UITextField *)textField như thế này:

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    if (textField == yourTextField){ 
     [yourTextfield resignFirstResponder]; 
    } 
} 

Vì vậy, bàn phím chỉ không có thời gian để xuất hiện

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