2012-06-26 15 views
8

Có cách nào để thêm nút hủy vào bàn phím được hiển thị cho UITextField không? Nhìn qua Tài liệu tham khảo giao thức UITextInputTraits, tôi không thể tìm thấy bất cứ điều gì, bao gồm cả việc thử các loại bàn phím khác nhau.Thêm nút hủy vào bàn phím UITextField

Trả lời

14

Bạn có thể tạo chế độ xem phụ kiện đầu vào có thể hiển thị UIToolBar Phía trên bàn phím và sau đó thêm nút hủy vào nút này. Hãy xem liên kết tài liệu dưới đây cho thuộc tính inputAccessoryView.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html

Đây là ví dụ về cái tôi đã làm cho một TextView. Phương thức Create Input Accessory View được gọi từ "textViewDidBeginEditing". Sau đó, nó tạo ra các phụ kiện đầu vào xem và trong trường hợp của tôi thêm ba nút và một thanh không gian.

Tôi hy vọng điều đó sẽ hữu ích.

-(void)textViewDidBeginEditing:(UITextView *)textView { 

[self createInputAccessoryView]; 
[textView setInputAccessoryView:_inputAccessoryView]; 
self.myTextView = textView; } 

-(void)createInputAccessoryView { 

_inputAccessoryView = [[UIToolbar alloc] init]; 
_inputAccessoryView.barStyle = UIBarStyleBlackOpaque; 
[_inputAccessoryView sizeToFit]; 

_inputAccessoryView.frame = CGRectMake(0,_collageView.frame.size.height - 44, _collageView.frame.size.width, 44); 

UIBarButtonItem *fontItem = [[UIBarButtonItem alloc] initWithTitle:@"Font" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(changeFont:)]; 
UIBarButtonItem *removeItem = [[UIBarButtonItem alloc] initWithTitle:@"Remove" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(removeTextView:)]; 
//Use this to put space in between your toolbox buttons 
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                      target:nil 
                      action:nil]; 
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                  style:UIBarButtonItemStyleDone 
                  target:self action:@selector(dismissKeyBoard:)]; 

NSArray *items = [NSArray arrayWithObjects:fontItem,removeItem,flexItem,doneItem, nil]; 
[_inputAccessoryView setItems:items animated:YES]; 
[_myTextView addSubview:_inputAccessoryView]; 
} 
+0

Cảm ơn vì điều này, mặc dù nếu bạn vừa mới thực hiện nút hủy, sẽ không hủy bỏ 'UIBarButtonItem' bên cạnh' UITextField' thực hiện điều tương tự mà không có chế độ xem phụ kiện? –

+0

Hãy nghĩ về nó, đó chính là điều tôi sẽ làm. Đây là một câu trả lời thực sự tốt mặc dù và nó chắc chắn giải quyết vấn đề của tôi, sẽ đánh dấu nó như được chấp nhận sau đó. –

+0

@kevinhorgan tại sao bạn không gán self.myTextView cho thuộc tính đầu vào ngay lập tức? – Camus

0

Andrew, nó thế nào? đó là Dima R!

Theo như tôi biết, không có cách nào tuyệt vời để làm những gì bạn đang cố gắng làm. Bạn có thể dễ dàng chọn một trong những xây dựng trong các loại được liệt kê here

typedef enum { 
    UIReturnKeyDefault, 
    UIReturnKeyGo, 
    UIReturnKeyGoogle, 
    UIReturnKeyJoin, 
    UIReturnKeyNext, 
    UIReturnKeyRoute, 
    UIReturnKeySearch, 
    UIReturnKeySend, 
    UIReturnKeyYahoo, 
    UIReturnKeyDone, 
    UIReturnKeyEmergencyCall, 
} UIReturnKeyType; 

gì bạn có thể làm là hãy thêm một cái nhìn trên đỉnh của bàn phím có chứa nút hủy của bạn, hoặc cố gắng đi qua thông qua hệ thống phân cấp xem và phủ lên những gì bạn muốn trên nút theo cách đó (mặc dù phương pháp này không đáng tin cậy). Thật không may, đây là một điều Apple đã không cung cấp nhiều tùy biến cho được nêu ra.

chỉnh sửa: Thực ra tôi nghĩ rằng tôi đã hiểu sai câu hỏi của bạn ngay từ đầu vì bạn sẽ không muốn nút hủy làm nút trả lại chính. Trong trường hợp này, chế độ xem phụ kiện đầu vào chắc chắn là cách để đi.

+1

Whoa là một sự nga ra sau, rất vui được gặp bạn ở đây. Và cảm ơn câu trả lời. Tôi muốn cung cấp cho người dùng thêm nút hủy, trong trường hợp họ muốn hủy nhập văn bản. –

+1

Câu trả lời của Kevin Horgan là câu trả lời bạn muốn, đó là cách chính xác để đạt được điều đó. – Dima

1

Tôi chỉ đánh rơi một UIToolbar vào điều khiển quan điểm của tôi trong Interface Builder, sau đó:

@property IBOutlet UIToolbar *keyboardAccessory; 

-(void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    // this is so I can edit it in Interface Builder, but it doesn't show in the view 
    [keyboardAccessory removeFromSuperview]; 
} 

-(BOOL) textFieldShouldBeginEditing:(UITextField*)textField { 
    textField.inputAccessoryView = keyboardAccessory; 
    return YES; 
} 

-(IBAction) pressedCancelButton { 
    [self.view endEditing:YES]; 
} 

Voila!