2016-07-29 10 views
0

ich eine Hilfsklasse haben, die etwa wie folgt aussieht:Geben eines UITextFieldDelegate zu UIViewController Hilfsklasse

(Wir werden diese gui.h rufen & GUI.M Files)

(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 

} 

ich einen Zeiger des Viewcontroller, Textfeld übergeben, und textFieldDeligate in und stellte sie programmically (NO xib ist, was so überhaupt)

Alloc, Set, ect, ist wie Sie ein Textfeld würde erstellen/konfigurieren oder label im viewcontroller, den du verwenden wolltest, außer dass die helper-klasse alles setzt. das Hinzufügen von Feldern ist also ein Aufruf, nicht alle üblichen Konfigurationen ...

Problem: Alles scheint gut zu funktionieren, mit der Ausnahme, dass die TextFieldDeligate-Funktionen nicht aufgerufen werden (clang - keine Warnungen, nichts. .)

Wenn ich diesen gleichen Code bewegen, plötzlich zurück in die aufrufende Klasse (UIViewController) werden die Delegierten immer genannt, überhaupt keine Probleme ...

Ein weiteres Problem: sobald die Prüffeld gesetzt ist, Sie sind nicht in der Lage, Dinge zu ändern, IE .. SecureText = TRUE bis FALSE .... Nichts passiert, wieder, wenn dieser Code zurück in den rufenden ViewController, Plötzlich immer verschoben wird ything Arbeiten wie in der Werbung ....

ich etwas vermuten, mit der Art und Weise zu tun, die „UITextFieldDeligate“ übergeben wird, aber wie ich schon erwähnt, Klirren nicht geben Warnungen ... NONE ...

Der UIViewController ist natürlich eingerichtet, um die deligates zu unterstützen und die Eigenschaften werden deklariert ... (wenn ich dieses Zeug zurück in die Klasse (der UIViewController) verschiebe (ohne eine separate Klasse für diese Einstellung dieser Felder) es funktioniert gut ...

Die Methode wird aufgerufen:

SomeUIViewController.M (Dies ist, wo wir die Funktion definiert in gui.h & M nennen)

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

UND JA Es gibt eine Eigenschaft für die UITextField und die Klasse hat das Protokoll erklärt

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; 

Und wie ich b4 erwähnt, ist der einzige plroblem ich bin Erfah Encing ist die Deligate-Methoden in der UIViewController (im Zusammenhang mit dieser UITextField) werden nicht aufgerufen ...

(Aber ich denke, es kann etwas Einfaches sein, weil ich gerade bemerkte, dass ich nicht deligate als Zeiger übergeben. ..So kann es bereits gelöst haben)

Vielen Dank im Voraus .....

+0

Ihre Methode Anruf macht keinen Sinn.Bitte geben Sie den richtigen Code ein. –

+0

Dies ist der Aufruf "Methode": "[self.gui addTextField: self textField: self.passField deligate: self.passField.delegate];" Welchen Teil verstehst du nicht? Ich werde es dir gerne erklären. – NpC0mpl3t3

+0

OK .... Der Delegat, der NICHT angerufen wird, ist FIXED! Ich habe den Delegierten des "UITextField.delegate" statt des Delegierten des UIViewController "self" übergeben Also werden die Delegaten NOW aufgerufen, aber immer noch Probleme mit der Einstellung bestimmter Attribute des TextFields, nachdem es dem SubView hinzugefügt wurde ... Ich kann das "textField.secureTextEntry" nicht ändern, das ist etwas anderes, das funktioniert, wenn der exakt gleiche Code in den aufrufenden UIViewController verschoben wird ... – NpC0mpl3t3

Antwort

0

OK .... Der Delegierte nicht immer genannt wird FIXED! Ich war das Bestehen der Delegierten des "UITextField.delegate" anstelle des Delegierten des UIViewController "Selbst"

AB:

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

TO:

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