2010-04-04 46 views
5

Tôi có một bàn phím tùy chỉnh mà tôi muốn hiển thị khi người dùng nhấn vào một UITextField. Nhưng đồng thời tôi muốn hiển thị con trỏ trong trường văn bản. Nếu nếu trả về NO cho canBecomeFirstResponder, nó không hiển thị bàn phím mặc định nhưng cũng không hiển thị con trỏ.iPhone - có thể không hiển thị bàn phím nhưng vẫn hiển thị con trỏ trong UITextField?

Ai đó có thể giúp tôi không?

Cảm ơn.

+0

thế nào là một con trỏ vào một UITextField hữu ích nếu không có bàn phím?Không quá nhiều, đó có lẽ là lý do tại sao nó không phải là một tính năng được hỗ trợ. – psychotik

+0

Có bàn phím tùy chỉnh. thats lý do tại sao tôi không muốn bàn phím mặc định để hiển thị, nhưng vẫn muốn con trỏ để người dùng biết nơi ông đang nhập văn bản – Swastik

+2

Có chắc chắn là một sử dụng cho việc này. Sherry, bạn có tìm thấy câu trả lời không? –

Trả lời

0

Tôi không chắc chắn về điểm, nhưng tại sao không chỉ sử dụng một nhãn UILabel với cùng nội dung của trường văn bản và được trang trí trông giống như trường văn bản của bạn với một con trỏ trong đó. Trao đổi nó cho một UITextField khi bạn muốn đầu vào.

+0

Tôi không muốn bàn phím mặc định hiện. Và làm cách nào để hiển thị con trỏ trong UILabel? – Swastik

+0

Ah, vậy bạn có nói rằng bàn phím tùy chỉnh của bạn không phải là một bàn phím như vậy, nó chỉ là một bộ nút để bạn muốn giả mạo toàn bộ điều? – Andiih

2

ký như thông báo bàn phím quan sát (ví dụ như trong bộ điều khiển xem nơi bạn muốn để ẩn bàn phím): -

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillShowNotification object:nil]; 

Đặt trong hideKeyboard: Chức năng: -

-(void)hideKeyboard:(NSNotification *)notification { 

    for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) { 
     for (UIView *keyboard in [keyboardWindow subviews]) { 
      if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) { 

       keyboard.alpha = 0; 
      } 
     } 
    } 
} 

(Nhờ luvieere trong thispost để chỉ cho tôi cách lấy bàn phím)

+0

Không hoạt động với tôi trong iOS4. Phương thức này được gọi nhưng không có chế độ xem nào có tiền tố của UIKeyboard –

+0

thnx hạnh phúc .. thực sự hữu ích, tôi muốn hiển thị con trỏ nhấp nháy trong trường văn bản của tôi mà không hiển thị bàn phím và công việc của nó thực sự ... –

0

Có 2 giải pháp cho vấn đề của bạn. 1) Đặt alpha của bàn phím thành 0 sẽ làm cho bàn phím ẩn đi ... có thể là tất cả những gì bạn muốn. Con trỏ sẽ xuất hiện.

2) UITextField triển khai giao thức UITextInputTraits. Nó sẽ luôn luôn gọi bàn phím khi nó trở thành người trả lời đầu tiên. Bạn sẽ cần phải kế thừa từ lớp đó hoặc lớp anther để thay đổi hành vi mặc định đó.

Chúc may mắn.

Nếu bạn cho chúng tôi biết những gì bạn đang cố gắng hoàn thành, chúng tôi có thể chuẩn bị một cách thanh lịch hơn để hoàn thành nó.

Vui chơi.

-1

Tại sao bạn cần con trỏ? Tôi nghĩ rằng tất cả những gì bạn cần làm là khi người dùng nhấn một phím trên bàn phím của bạn, bạn có thể cập nhật giá trị văn bản của đầu vào.

5

Câu trả lời cho vấn đề của bạn là tạo chế độ xem cho bàn phím tùy chỉnh và sau đó chỉnh sửa thuộc tính inputView của UITextField và chuyển giao chế độ xem cho bàn phím tùy chỉnh của bạn.

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

+0

thanx ArturoVM làm việc tốt cho tôi –

4

Có vẻ như những gì bạn muốn là UITextField với bàn phím tùy chỉnh. Tạo lớp CustomKeyboard : UIView và thêm các nút/bố cục chế độ xem. Sau đó, cho textfield của bạn chỉ cần đặt thuộc tính inputView vào một thể hiện của lớp CustomKeyboard textField.inputView = customKeyboard;. Bạn sẽ cần đặt thuộc tính inputView để được ghi đè cũng như @property (readwrite, retain) UIView *inputView; Bằng cách đặt thuộc tính inputView, bàn phím iPhone tiêu chuẩn sẽ không xuất hiện khi trường văn bản trở thành trả lời đầu tiên.

+0

Nếu bạn không cần chức năng bàn phím tùy chỉnh (có thể nhập văn bản của bạn là rất không chính thống) sau đó tạo một UIView giả (không chỉ định khung) và làm cho .inputView sẽ hoạt động tốt. Sau đó, chỉ cần gọi trở thànhFirstResponder trên textField của bạn. – HenryRootTwo

3

ghi đè hai phương thức sau trong UITextFieldDelegate. Lưu ý rằng phương pháp này là hợp lệ cho cả UITextField và UITextView (trong trường hợp bạn ghi đè lên các phương pháp tương ứng trong UITextViewDelegate)

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    if (!textField.inputView) { 
     //hides the keyboard, but still shows the cursor to allow user to view entire text, even if it exceeds the bounds of the textfield 
     textField.inputView = [[UIView alloc] initWithFrame:CGRectZero]; 
    } 
    return YES; 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    return NO; 
} 
Các vấn đề liên quan