2012-10-05 27 views
9

đã điều sau đây:UITextFieldTextDidChangeNotification không được kêu gọi iOS6 ipad3

// watch the fields 
[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(handleTextChange:) 
               name:UITextFieldTextDidChangeNotification 
              object:textField1]; 

và sau đó:

-(void) handleTextChange:(NSNotification *)notification { 
    ... 
} 

Có một breakpoint trong -handleTextChange:, nhưng không bị sa thải. textField được kết nối trong Trình tạo giao diện.


Hoạt động trên iOS6 iPhone/iPad giả lập, trên iOS5.1 iPad2, nhưng không phải trên iOS6 iPad3.

Trả lời

7

vì vậy tôi đã tìm ra. Điều gì đã thay đổi trong SDK IOS6 là nếu bạn thay đổi văn bản của textfield theo lập trình, nó không gửi một thông báo. Tôi có một bàn phím tùy chỉnh trên tất cả các chế độ xem đó. khi tôi gõ vào một phím, nó thay đổi giá trị văn bản trường văn bản bằng cách thêm bất cứ điều gì tôi đã nhập. Trong ios 5 nó sẽ gửi một thông báo "textdidchange", nhưng không phải trong ios6.

+2

nơi bạn có thể tìm thấy nội dung nào đó tương tự với công việc trên ios6? – Marco

0

Trên ipad3 & thông báo iOS6.0 UITextFieldTextDidChangeThông báo làm việc tốt. đặt

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handleTextChange:) 
              name:UITextFieldTextDidChangeNotification 
             object:textField1]; 

trong viewDidLoad bạn

7

Irena là đúng, UITextFieldTextDidChangeNotification không cháy, khi lĩnh vực văn bản được thiết lập theo chương trình. Tuy nhiên tôi chỉ muốn làm rõ rằng nó không có gì để làm với iOS6, nó đã làm với SDK iOS 6. Nếu bạn biên dịch với SDK iOS 5.1, thông báo UITextFieldTextDidChangeNotification sẽ kích hoạt bất cứ khi nào trường văn bản bị thay đổi, theo lập trình hoặc cách khác, ngay cả khi chạy trên thiết bị iOS 6.

+0

Bạn có vô tình báo cáo đây là lỗi của Apple không? – Shaolo

0

Là một workaround tạm thời cho đến khi Apple sửa lỗi này, bạn có thể sử dụng ví dụ đoạn mã sau:

//view is a UITextField 
NSString *temp = ((UITextField*)view).text; 
((UITextField*)view).text = @""; 
[((UITextField*)view) insertText:[NSString stringWithFormat:@"%@%@", @"-", temp]]; 

Đó là mã sẽ tiếp tục kích hoạt sự kiện.

này hoạt động quá:

[((UITextField*)view) sendActionsForControlEvents:UIControlEventEditingChanged]; 
1

trường hợp sử dụng của tôi là hơi đặc biệt, tôi đã tạo ra HH: MM: thời gian SS UITextField với các nhân vật vào từ phía sau, do đó bẫy nhân vật trong - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string và sau đó trở return (NO); cấm tự động cập nhật UITextField ... trước iOS6, nó được gọi là thông báo, sau iOS6, tôi chỉ cần gọi số [[NSNotificationCenter defaultCenter] postNotificationName:UITextFieldTextDidChangeNotification object:self.textField]; ngay trước câu lệnh return.

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