2014-05-12 14 views
11

Tôi đã nhận mã dưới đây từ this SO câu hỏi. Tôi đang cố gắng để trượt lên các lĩnh vực văn bản khi tôi bắt đầu chỉnh sửa (bởi vì họ nếu không được bảo hiểm bởi bàn phím iPhone). Tuy nhiên, câu lệnh log cho thấy rằng phương thức textFieldDidBeginEditing không được gọi.textFieldDidBeginEditing: không nhận được gọi

Tôi có đoạn code dưới đây trong hai lớp con khác nhau của UIViewController. Trong một trong số họ, ví dụ, tôi có một textfield kết nối từ các kịch bản để các UIViewController như thế này

@property (strong, nonatomic) IBOutlet UITextField *mnemonicField; 

tôi chuyển textfield lên đến đỉnh điểm (tức là không được bao phủ bởi bàn phím) vì vậy mà tôi có thể chỉnh sửa nó để cố kích hoạt báo cáo nhật ký nhưng nó không hoạt động. Các lĩnh vực văn bản khác làm việc như mong đợi nghĩa là liên kết dữ liệu tôi nhập là nhận được lưu vào CoreData vv vv

bạn có thể giải thích những gì tôi có thể làm sai?

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    NSLog(@"The did begin edit method was called"); 
    [self animateTextField: textField up: YES]; 
} 


- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [self animateTextField: textField up: NO]; 
} 

- (void) animateTextField: (UITextField*) textField up: (BOOL) up 
{ 
    const int movementDistance = 180; // tweak as needed 
    const float movementDuration = 0.3f; // tweak as needed 

    int movement = (up ? -movementDistance : movementDistance); 

    [UIView beginAnimations: @"anim" context: nil]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration: movementDuration]; 
    self.view.frame = CGRectOffset(self.view.frame, 0, movement); 
    [UIView commitAnimations]; 
} 
+0

Có bất kỳ phương pháp đại biểu nào khác được gọi hoặc khi nào đã làm bạn thiết lập các đại biểu? – Larme

+0

@larme Tôi phải thiết lập một đại biểu cho việc này để làm việc? không biết rằng – Leahcim

+0

'textFieldDidEndEditing': là phương thức ủy nhiệm. Đó là một phương thức 'UITextFieldDelegate', không phải là' UITextField'. – Larme

Trả lời

34

Bạn chưa giao delegate lại UITextField trong ViewController lớp học của bạn:

Trong file viewcontroller.m bạn, Trong ViewDidLoad phương pháp, làm điều này:

self.mnemonicField.delegate=self; 

Trong viewcontroller.h của bạn tệp, hãy thực hiện việc này:

@interface YourViewController : ViewController<UITextFieldDelegate> 
+0

tuyệt vời, cảm ơn bạn – Leahcim

+0

tôi đã khắc phục sự cố của mình bằng cách sử dụng cảm ơn này @ Khawar Ali. –

3

Bạn nên thiết lập ủy nhiệm trường văn bản cho chính mình. Thêm dòng này vào phương pháp viewDidLoad:

self.mnemonicField.delegate = self; 

và nhớ thêm dòng này <UITextFieldDelegate> để phù hợp với giao thức đó.

Bạn có thể đạt được hiệu quả tương tự trong kịch bản bằng cách điều khiển kéo từ UITextField mong muốn để xem điều khiển và chọn đại biểu.

4

Bạn tạo IBOutlet vì vậy chỉ cần kéo textfield của bạn để viewController và thiết lập đại biểu

enter image description here Sau đó, trong .h thêm dòng sau

@interface ViewController : ViewController<UITextFieldDelegate> 
1

Trong trường hợp khác nếu bạn nhấp vào bất kỳ nút khác mà không di chuyển trọng tâm của Uitextfield sau đó ủy quyền sẽ không được gọi, vì vậy bạn cần gọi rõ ràng

yourtextfield.resignFirstResponder() 
Các vấn đề liên quan