2016-11-10 2 views
0

Я использую SDK Google Maps, и в настоящее время у меня есть карта, которая будет маршрутизировать пользователя из любого места в определенное место. Я хотел бы, чтобы пользователь мог вводить туда, куда захочет, а не всегда маршрутизироваться в одно и то же место. Я добавил текстовое поле в графический интерфейс, и всякий раз, когда я запускаю приложение в симуляторе и нажимаю текстовое поле, клавиатура не появляется, и она действует так, как будто я не нажимал на нее.Текстовое поле не работает после нажатия на симулятор

Вот как я создал свой проект:

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) 
    } 

Там есть больше, но это все, что я чувствую, имеет отношение к этой проблеме. Я действительно добавил два текстовых поля здесь, и ни одна из них не работает! Пожалуйста помоги!

+0

вид интересная проблема. Вы тестируете его в своем симуляторе? –

+0

ive попробовал использовать симулятор, а также с помощью моего собственного телефона! – skyleguy

+0

Поскольку я создаю все мои элементы GUI в контроллере представления, должен ли я просто удалить main.storyboard целиком? – skyleguy

ответ

0

Вы можете ввести текстовое поле, используя клавиатуру macs. Если вы хотите, чтобы клавиатура отображалась, нажмите CMD + K в симуляторе, чтобы переключить программную клавиатуру.

Клавиатура будет отображаться на устройстве.

+0

, но он не отображается на устройстве или симуляторе (даже после переключения клавиатуры) – skyleguy

+0

Так как я создаю все свои элементы GUI в контроллере представления, должен ли я просто удалить main.storyboard полностью? – skyleguy

+0

Я не думаю, что удаление раскадровки - проблема. Вы можете видеть текст, когда вы textField.text = "demo" –

0

Вам необходимо включить Control State of your textField, как показано ниже, из раскадровки или программно.

enter image description here

latitude.isEnabled = true 
longitude.isEnabled = true 

Обновлено:

Примечание: Переместить весь код внутри viewDidLoad?, как показано ниже

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

Попробуйте один из ниже метод позволит textField.When textField начать редактирование ...

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

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

Я на самом деле сделал только одну кнопку и называется «время». Я добавил эту строку, и она все еще не работает! Любые другие идеи? – skyleguy

0

Есть ли у вас методы делегирования текстового поля в вашем коде? Затем проверьте функцию textFieldShouldBeging, если ваш написанный код отменил эту клавиатуру текстового поля. В то же время я не вижу причин, чтобы не показывать клавиатуру, даже если вы написали свое объявление текстового поля путем кодирования.

Как вы написали все свои элементы программным способом в своем классе, проверьте, не перекрывает ли какой-либо элемент текстовое поле. Вот почему даже вы думаете, что нажимаете на текстовое поле, вы на самом деле щелкаете что-то еще.

+0

Нет, я не написал никаких методов делегата! Кто они такие? – skyleguy

+0

Скопируйте вставьте свой полный вид, используя метод и любой связанный с ним метод, который отвечает за дизайн пользовательского интерфейса. –

0

Пожалуйста, переместите все ваши кнопки и текстовые поля из метода 'viewDidLoad' в метод 'viewDidLayoutSubviews'. Если вы используете автоматические макеты, то при написании кнопок и декларации текстового поля в режиме загрузки метод загрузки может вызвать проблемы.

Смежные вопросы