2016-11-10 1 views
0

Ich benutze das Google Maps SDK und derzeit habe ich eine Karte, die den Benutzer von wo auch immer sie zu einem bestimmten Ort sind. Ich möchte, dass der Benutzer eingeben kann, wohin er möchte, anstatt immer an denselben Ort weitergeleitet zu werden. Ich habe der GUI ein Textfeld hinzugefügt und wenn ich die App im Simulator starte und auf das Textfeld klicke, erscheint keine Tastatur und es verhält sich so, als hätte ich sie nicht angetippt.Textfield funktioniert nicht einmal angeklickt im Simulator

Hier ist, wie ich mein Projekt ein:

import UIKit 
import GoogleMaps 
import GooglePlaces 
import CoreData 

class ViewController: UIViewController, CLLocationManagerDelegate, UITextFieldDelegate 
{ 

let locationManager = CLLocationManager() 
    var currLocation: CLLocationCoordinate2D! 
    var keyy = "myKeyIsHere" 
    var didFindMyLocation = false 
    var count: Int = 0 
    var button = UIButton() 
    var latitude = UITextField() 
    var longitude = UITextField() 
    var path = GMSMutablePath() 

super.viewDidLoad() 
     let blah = GMSCameraPosition.camera(withLatitude: 39.8282, longitude: -98.5795, zoom: 25.0) 
     mapView.camera = blah 
     locationManager.delegate = self 
     locationManager.requestWhenInUseAuthorization() 
     mapView.addObserver(self, forKeyPath: "myLocation", options: NSKeyValueObservingOptions.new, context: nil) 

     currLocation = mapView.myLocation?.coordinate 

     button = UIButton(type: .system) 
     button.frame = CGRect(x: 135, y: 40, width: 100, height: 40) 
     button.backgroundColor = UIColor.clear 
     button.layer.cornerRadius = 5 
     button.layer.borderWidth = 1 
     button.layer.borderColor = UIColor.blue.cgColor 
     button.setTitle("Route", for: UIControlState.normal) 
     button.addTarget(self, action: #selector(ViewController.buttonPressed), for: UIControlEvents.touchUpInside) 

     latitude = UITextField() 
     latitude.frame = CGRect(x: 5, y: 90, width: 175, height: 35) 
     latitude.backgroundColor = UIColor.white 
     latitude.layer.cornerRadius = 5 
     latitude.layer.borderWidth = 1 
     latitude.layer.borderColor = UIColor.black.cgColor 
     latitude.isUserInteractionEnabled = true 
     latitude.text = " Enter Latitude" 
     latitude.keyboardType = UIKeyboardType.numbersAndPunctuation 
     self.latitude.delegate = self 

     longitude = UITextField() 
     longitude.frame = CGRect(x: 195, y: 90, width: 175, height: 35) 
     longitude.backgroundColor = UIColor.white 
     longitude.layer.cornerRadius = 5 
     longitude.layer.borderWidth = 1 
     longitude.layer.borderColor = UIColor.black.cgColor 
     longitude.isUserInteractionEnabled = true 
     longitude.text = " Enter Longitude" 
     longitude.keyboardType = UIKeyboardType.numbersAndPunctuation 
     self.longitude.delegate = self 

     self.view.addSubview(latitude) 
     self.view.addSubview(button) 
     self.view.addSubview(longitude) 
    } 

Es ist aber alles, was ich für das Problem relevant fühlen. Ich habe hier tatsächlich zwei Textfelder hinzugefügt, und beide funktionieren nicht! Bitte helfen Sie!

+0

Art ein interessantes Problem. Testen Sie es in Ihrem Simulator? –

+0

ive versucht mit dem Simulator, und auch mit meinem eigenen Telefon! – skyleguy

+0

Da ich alle meine GUI-Elemente im View-Controller erstelle, sollte ich einfach das main.storyboard komplett löschen? – skyleguy

Antwort

0

Sie können das Textfeld mit Ihrer Macs-Tastatur eingeben. Wenn Sie möchten, dass die Tastatur angezeigt wird, drücken Sie im Simulator auf Cmd + K, um die Softwaretastatur zu wechseln.

Die Tastatur wird auf dem Gerät angezeigt.

+0

aber es erscheint nicht auf dem Gerät oder dem Simulator (auch nach dem Umschalten der Tastatur) – skyleguy

+0

Da ich alle meine GUI-Elemente in der Ansicht-Controller erstellen, sollte ich nur löschen main.storyboard vollständig? – skyleguy

+0

Ich glaube nicht, dass das Löschen des Storyboards das Problem ist. Sind Sie in der Lage, Text zu sehen, wenn Sie textField.text = "demo" –

0

Sie müssen die Control State of your textField wie folgt vom Storyboard oder programmatisch aktivieren.

Hinweis:

enter image description here

latitude.isEnabled = true 
longitude.isEnabled = true 

Aktualisiert alle Bewegen Sie den Code in viewDidLoad? wie unten

override func viewDidLoad() { 
super.viewDidLoad() 
} 

eine der folgenden Methode Versuchen Sie textField.When zu ermöglichen TextField beginnt mit der Bearbeitung ...

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 
    print("textFieldShouldBeginEditing:") 
    return true 
    } 

    func textFieldDidBeginEditing(_ textField: UITextField){ 
    print("textFieldDidBeginEditing:") 
    } 
+0

Ich habe eigentlich nur einen Knopf gemacht und es heißt "Zeit". Ich habe diese Zeile hinzugefügt und es funktioniert immer noch nicht! Irgendwelche anderen Ideen? – skyleguy

0

Haben Sie textfield delegate-Methoden in Ihren Code geschrieben? Dann überprüfe die textFieldShouldBeging-Funktion, wenn du Code geschrieben hast, um diese Textfeld-Tastatur zu verlassen. Sonst sehe ich keinen Grund, die Tastatur nicht zu zeigen, selbst wenn Sie Ihre Textfeld-Deklaration durch Kodierung geschrieben haben.

Da Sie alle Ihre Elemente programmgesteuert in Ihrer Klasse geschrieben haben, überprüfen Sie, ob eines der Elemente Ihr Textfeld überschreibt. Deshalb denken Sie sogar, dass Sie auf das Textfeld klicken, Sie klicken tatsächlich auf etwas anderes.

+0

nein ich habe keine Delegierten Methoden geschrieben! Was sind Sie? – skyleguy

+0

Bitte kopieren Sie Ihre Full-View-Did-Methode und alle zugehörigen Methoden, die für das UI-Design verantwortlich sind, hier. –

0

Bitte verschieben Sie alle Ihre Schaltflächen und Textfelder Deklaration von "viewDidLoad" -Methode auf "ViewDidLayoutSubviews" -Methode. Wenn Sie automatische Layouts verwenden, kann das Schreiben der Schaltflächen und der textfield-Deklaration in der view did load-Methode zu Problemen führen.

Verwandte Themen