2015-10-08 76 views
2

我想實現一個可重用的UITextFieldDelegate類,如下所示:雨燕可重複使用的UITextFieldDelegate

class CustomTextFieldDelegate : NSObject, UITextFieldDelegate 

所有委託協議方法得到正確實施。

controller,我分配delegateUITextField

textField.delegate = CustomTextFieldDelegate() 

的問題是,沒有一個代表函數被調用。但是,當我從控制器實施代表協議,然後事情工作正常

class CustomTableViewController: UITableViewController, UITextFieldDelegate 

任何想法是怎麼回事?

+3

我猜那是什麼。由於委託是文本字段中的弱變量,並且沒有任何內容保留您的CustomTextFieldDelegate實例。它會自動釋放。 – Horst

+0

我想你必須創建一個'UITextField'的擴展/子類並保留你的代理 –

+0

我會試試這個。謝謝 –

回答

2

如果你想通過項目重用CustomTextFieldDelegate,你應該使用一個Singleton實例;

textField.delegate = CustomTextFieldDelegate.sharedInstance 

和課改

class CustomTextFieldDelegate : NSObject, UITextFieldDelegate { 

    static let sharedInstance:CustomTextFieldDelegate = CustomTextFieldDelegate(); 

    func textFieldDidBeginEditing(textField: UITextField) { 
     NSLog("textFieldDidBeginEditing ..."); 
    } 
    //... other methods 
} //F.E. 
+0

我不想繼承協議。相反,我試圖創建一個可以在許多文本字段上使用的可重用委託。 –

+0

@ Joe.b結帳我更新的答案。它的工作測試迅速1.2 – Shoaib

+0

這是做到了。謝謝。你能解釋爲什麼單身人士的作品,但創建一個對象不? –