2012-04-11 9 views
-1

In meinem Projekt habe ich eine Ansicht als Stammansicht meiner App festgelegt. [AddSubview] - - foregroundView - [addSubview] - TextfeldKann sich nicht auf das Textfeld konzentrieren

Ich

RootView:

In der Steuerung dieser Root-Ansicht, ich habe so ein Hierachie bekam Das habe ich im Code statt in Xib getan.

In diesem Fall kann das Textfeld nicht fokussiert werden. Es scheint, dass nichts passiert ist, als ich auf das Textfeld auf dem Bildschirm klicke. Aber wenn ich so geändert:

RootView - [addSubview] - foregroundView

RootView - [addSubview] - Textfeld

Alles hat gut funktioniert.

Da ich foregroundView und textfield als Gruppe machen möchte, bevorzuge ich den früheren Stil. Hast du eine Idee davon? Vielen Dank.

Hier ist der Kern-Quellcode für mein Problem ist:

//it's a viewController.m , it's view has been set as the root view for the app. 
self.foregroundView = [[UIImageView alloc] initWithFrame:CGRectMake(15, 140, 290, 250)]; 
UIImage *foregroundImage = [XYZImageProcessor resizeImage:[UIImage imageNamed:@"Texture0203.jpg"] toSize:CGSizeMake(275, 250)]; 
[self.view addSubview:self.foregroundView ]; 
self.nickNameTextField = [self.class customTextFieldMake:CGRectMake(80, 200, 150, 30)]; 
[self.view addSubview:self.nickNameTextField]; 
//if I change it to [self.foregroundView addSubview:self.nickNameTextField],the textfield can not be focused. 
+0

Was meinst du mit "wird nicht fokussiert"? Erscheint die Tastatur überhaupt? – CodaFi

+0

können Sie den Code veröffentlichen, in dem Sie die Ansichtshierarchie erstellen? – danh

+0

'nicht fokussieren' bedeutet, wenn ich das Textfeld auf dem Bildschirm berühre, kann die Tastatur nicht erscheinen. Ich werde jetzt einen Quellcode hinzufügen, sorry dafür – biaobiaoqi

Antwort

2

Dieser Sound, als ob foregroundViewuserInteractionEnabled auf NO gesetzt hat. Dies bedeutet nicht, dass foregroundView keine Berührungsereignisse empfängt - auch keiner seiner Unteransichten. Siehe How to get touches when parent view has userInteractionEnabled set to NO in iOS. (Kurze Antwort: Sie können nicht.)

Also versuchen Sie [foregroundView setUserInteractionEnabled:YES] beim Erstellen Ihrer Ansichten.

Wenn foregroundView seine eigene hitTest:withEvent: implementiert, könnte es auch die Interaktion mit seinen Unteransichten verhindern.

+0

Vielen Dank. Es läuft gut! – biaobiaoqi

0

Versuchen Sie dies in viewWillAppear tun:

[desiredField becomeFirstResponder]; 

das Feld den Ersthelfer Indem, haben es den Fokus und die Tastatur wird Angezeigt werden.

+0

Es ist keine gute Idee, -becomeFirstResponder zu nennen. Die Dokumentation für die Methode besagt "Verwenden Sie die NSWindow makeFirstResponder: Methode, nicht diese Methode, um ein Objekt zum ersten Responder zu machen. Rufen Sie diese Methode niemals direkt auf." https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference/Reference.html#//apple_ref/occ/cl/NSResponder – Vervious

+0

Danke :). BecomesFirstResponder wird die Tastatur bekommen, aber es erscheint am Anfang, ohne meine Kontrolle. Ich kann mich immer noch nicht darauf konzentrieren, nachdem ich die Tastatur verlassen habe. makeFirstResponder sollte in einem NSWindow aufgerufen werden, das meinem Fall möglicherweise nicht entspricht. – biaobiaoqi

Verwandte Themen