将UITextFieldDelegate传递给UIViewController助手类

时间:2016-07-29 12:02:10

标签: ios objective-c uiviewcontroller

我有一个帮助类,看起来像这样:

(我们称之为GUI.H& GUI.M文件)

(DOT.H FILE)

- (CGGroup)addLabelTextField:(UIViewController*)vc deligate:(id<UITextFieldDelegate>)deligate textField:(UITextField*)textField;

(DOT.M FILE)

- (CGGroup)addLabelTextField:(UIViewController*)vc deligate:(id<UITextFieldDelegate>)deligate textField:(UITextField*)textField
{

     // Blah, Blah Blah Blah Set Up & Configure Label & Textfield... 10 lines 

     // DONE Allocating & Configuring OK 

    // Last 3 Lines -- this is where the Deligate gets SET and the problems
    textField.delegate = deligate; // <- this is what is NOT happening
    [vc.self.view addSubview:textField]; // this adds TextField to passed in UIViewController
    return(cgTmp); // nothing to see here just a typedef of CGRect's

}

我传递一个ViewController,textField和textFieldDeligate的指针并以编程方式设置它们(NO xib&#39; s what-so-ever)

Alloc,set,ect就像你在将要使用它的viewcontroller中创建/配置文本字段或标签一样,除了传递助手类设置所有东西。所以添加字段是一个调用,而不是所有通常的配置......

问题: 一切似乎工作正常,除了没有调用TextFieldDeligate函数(clang - 没有警告,没有......)

如果我移动相同的代码,返回调用类(uiViewController) 突然间,代表们被召唤,完全没有问题......

另一个问题:一旦设置了testfield,你就无法改变东西,IE .. SecureText = TRUE为FALSE ....没有任何反应,当这段代码被移回到调用viewController时,突然间一切正常正如所宣传的......

我怀疑与&#34; UITextFieldDeligate&#34;的方式有关。正在通过,但正如我所提到的,clang没有给出任何警告......没有...

UIViewController当然是为了支持分组而设置的 并声明属性...... (如果我将这些东西移回到类(UIViewController)中(没有为这些字段设置这些字段的单独类),它可以正常工作......

该方法被调用:

SomeUIViewController.M (这是我们调用GUI.H&amp; M中定义的函数的地方)

[self.gui addTextField:self textField:self.passField deligate:self.passField.delegate];

AND YES UITextField有一个属性,类具有声明的协议

SomeUIViewController.H

@interface SomeUIViewController : UIViewController <UITextFieldDelegate>{

}

@property (nonatomic, strong) GuiUtils *gui;
@property (nonatomic, strong) UITextField *userField;
@property (nonatomic, strong) UITextField *passField;
@property (nonatomic, strong) UITextField *tmpField;

正如我提到的b4,我遇到的唯一问题是UIViewController中的deligate方法(与这个UITextField相关)没有被调用...

(但我认为这可能是一件简单的事情,因为我只是注意到我没有将deligate作为指针传递......所以它可能已经解决了)

提前致谢.....

1 个答案:

答案 0 :(得分:0)

好的......没有被调用的代表是固定的! 我正在通过&#34; UITextField.delegate&#34;的代表。而不是UIViewController的代表&#34; self&#34;

发件人:

[self.gui addTextField:self textField:self.passField deligate:self.passField.delegate];

[self.gui addTextField:self textField:self.passField deligate:self];