2009-10-22 37 views
14

Tôi đang cố gắng sử dụng bàn phím tùy chỉnh trong ứng dụng của mình, nhưng tôi đang gặp sự cố khi cố gắng hạn chế nó cho một UITextField cụ thể.Cách tìm hiểu UITextField đã gây ra UIKeyboardWillShowNotification là gì?

Tôi dựa trên mã của mình trên this Xcode project (ban đầu được tìm thấy trên this blog). Mã đó thêm một UIButton tùy chỉnh (đại diện cho một 'dấu thập phân') vào khung nhìn bàn phím UIKeyboardTypeNumberPad. Nó làm điều đó bằng cách đăng ký UIKeyboardWillShowNotification và sửa đổi bàn phím khi nó xuất hiện.

Dự án Xcode đó hoạt động tốt, nhưng khi tôi thêm UITextField thừa, khóa tùy chỉnh cũng được đưa vào bàn phím cho trường văn bản đó, mặc dù tôi đã chọn loại bàn phím hoàn toàn khác cho trường văn bản đó.

tôi cố gắng đăng ký để chỉ nhìn thấy thông báo UIKeyboardWillShowNotification từ một đặc biệt UITextField, nhưng điều đó dường như không làm việc:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:exampleViewController.textField]; 

Tôi cũng đã cố gắng để kiểm tra các đối tượng bên trong NSNotification truyền cho keyboardWillShow, nhưng tiếc là nó đề cập đến bàn phím, không phải là điều khiển giao diện người dùng khiến bàn phím xuất hiện.

2009-10-21 19:50:22.205 Example[6302:207] NSConcreteNotification 0x321ebd0 {name = UIKeyboardWillShowNotification; userInfo = { 
UIKeyboardAnimationCurveUserInfoKey = 0; 
UIKeyboardAnimationDurationUserInfoKey = 0.300000011920929; 
UIKeyboardBoundsUserInfoKey = NSRect: {{0, 0}, {320, 216}}; 
UIKeyboardCenterBeginUserInfoKey = NSPoint: {160, 588}; 
UIKeyboardCenterEndUserInfoKey = NSPoint: {160, 372}; 

}}

Tôi hiểu lầm giao diện addObserver? Chắc chắn phải có cách đăng ký thông báo từ một điều khiển giao diện người dùng cụ thể?

Có ai có bất kỳ đề xuất nào khác về cách đạt được điều này không?

Trả lời

0

Dự án đó hoạt động tốt, nhưng khi tôi thêm UITextField thừa, khóa tùy chỉnh cũng được đưa vào bàn phím cho trường văn bản đó.

Bạn có thể đặt các loại bàn phím cho một trường hợp UITextField, ví dụ .:

[myTextField setKeyboardType:UIKeyboardTypeDefault]; 

hay:

myTextField.keyboardType = UIKeyboardTypeDefault; 

Tìm kiếm sự giúp đỡ Xcode trên UITextInputTraits Protocol cho một danh sách các UIKeyboardType hằng số.

+0

tôi đặc biệt thiết lập UITextField khác để sử dụng các loại bàn phím khác nhau. Thật không may là mã 'bàn phím tùy chỉnh' sửa đổi bất kỳ bàn phím nào xuất hiện và tôi không thể tìm ra cách để phân biệt UITextField nào gây ra thông báo UIKeyboardWillShowNotification xảy ra. Tôi đã cập nhật bài đăng để làm rõ thêm một chút. –

-2

tôi đã đạt được điều này trước bằng cách so sánh các đối tượng với các đối tượng giao diện người dùng mà tôi quan tâm đến Như thế này:.

if(notification.object == exampleViewController.textField) 
{ 
    ... 
} 
+7

Điều này là sai. Tài liệu nêu rõ rằng đối tượng thông báo là không: "UIKeyboardWillShowNotification: Được đăng ngay trước khi hiển thị bàn phím. Đối tượng thông báo là không." –

21

Không thể lấy bất kỳ ở trên để làm việc. Phải làm điều đó theo cách thủ công:

if ([companyName isFirstResponder]) { 
    // ............... 
} 
else if ([notes isFirstResponder]) { 
    //............. 
    } 
} 
2

Bạn có thể viết phương pháp danh mục UIView để tìm trả lời đầu tiên.

- (UIView *)firstResponder 
{ 
    if ([self isFirstResponder]) 
    { 
     return self; 
    } 

    for (UIView *view in self.subviews) 
    { 
     UIView *firstResponder= [view firstResponder]; 
     if (firstResponder) 
     { 
      return firstResponder; 
     } 
    } 

    return nil; 
} 

Sau đó, trong phương pháp - (void)keyboardWillShow:(NSNotification *)notification của bạn, bạn có thể sử dụng nó như thế này

UITextField *textField = (UITextField *)[self firstResponder]; 
+0

Điều này làm việc cho tôi. – Stunner

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