2012-10-05 101 views
0

我有一個DetailViewController,其實現文件包含以下代碼:的UITextField不調用委託方法

#import <UIKit/UIKit.h> 

@interface DetailViewController : UIViewController <UITextFieldDelegate> 

{ 
    __weak IBOutlet UITextField *nameField; 
    __weak IBOutlet UITextField *numberField; 
} 

@end 

在我的故事板,我已經設置了ViewController年代到DetailViewController,並連接我的兩個UITextField S的的代表到我的DetailViewController。我DetailViewController的實現文件包含此方法叩擊聲,比文本字段之外的其他地方時,取消鍵盤:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

這種方法雖然不叫,我一直在使用斷點測試這一點。可能會出現什麼問題?

+2

你有沒有把日誌語句放在那裏看看它是否被調用?當用戶點擊返回按鈕時調用此方法,而不是在文本字段以外的地方點擊。 – rdelmar

+0

在您的VDL中放入一個'NSLog(@「DELEGATE =>%@」,nameField.delegate);'以查看委託是否真的被設置? –

回答

1

rdelmar是正確的,你當用戶點擊鍵盤上的「返回」鍵只被觸發的代碼,而不是當他們點擊鍵盤外部時。

要獲得您要查找的行爲,我會在您的文本字段後面的視圖中添加一個Tap Gesture識別器,然後將[nameField resignFirstResponder];[numberField resignFirstResponder];放入輕擊手勢識別器的代碼中。

+0

謝謝,我不知道!我已經添加了Tap Gesture Recognizer,現在它工作正常。 :) –

+0

很高興聽到我能幫忙。 – GeneralMike

0

爲什麼使用_weak?去掉它。

在你.m文件做(在viewDidLoad):

[nameField setDelegate:self]; 

同爲其他文本框(或多個)。

+1

弱IBOutlets罰款,並設置在IB代表應該也正常工作。事實上,這些網點與手頭的問題無關 - 即使沒有名稱,代表也應該可以工作。 – rdelmar

+1

這樣做以編程方式節省了大量的工作和錯誤。你不知道什麼時候建立與xib的連接建設..如果你做所有的編程,你可以更容易地發現錯誤和東西 – xCoder

0
  • 我創建了一個樣本項目
  • 添加到ViewController
  • 添加一個文本框,並連接其委託
  • 把代碼寫在視圖 - 控制

    (BOOL)textFieldShouldReturn:(UITextField *)textField 
    { 
        [textField resignFirstResponder]; 
        return YES; 
    } 
    

它工作得很好。堅持弱它也作爲實例變量和屬性

因此,檢查如果你在任何地方重新分配它,並檢查它的內存是相同的還有用的斷點