2017-12-02 366 views
0
的一部分

我是新來迅速做出反應,我有這樣的代碼,它是UIViewControllerUITextFieldUIButton的UIButton,同時也是UITextField不作爲的UIViewController

import Foundation 
import UIKit 

class ManualTagController: UIViewController, UIGestureRecognizerDelegate, UITextFieldDelegate { 
    let addTagButton = UIButton() 
    let tagTextfield = UITextField() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.view.backgroundColor = UIColor.white 
     self.view.layer.cornerRadius = self.view.frame.width/80 

     self.addTagButton.setTitle("TAG", for: .normal) 
     self.addTagButton.backgroundColor = UIColor(red: 200.0/255, green: 17.0/255, blue: 57.0/255, alpha: 0.75) 
     self.addTagButton.addTarget(self, action: #selector(addTag), for: .touchUpInside) 
     self.addTagButton.layer.masksToBounds = true 
     self.addTagButton.clipsToBounds = true 
     view.addSubview(addTagButton) 

     self.tagTextfield.placeholder = "# or 'hey siri'" 
     self.tagTextfield.alpha = 1 
     self.tagTextfield.font = UIFont.systemFont(ofSize: 52) 
     self.tagTextfield.borderStyle = UITextBorderStyle.roundedRect 
     self.tagTextfield.autocorrectionType = UITextAutocorrectionType.no 
     self.tagTextfield.keyboardType = UIKeyboardType.default 
     self.tagTextfield.returnKeyType = UIReturnKeyType.done 
     self.tagTextfield.clearButtonMode = UITextFieldViewMode.whileEditing; 
     self.tagTextfield.contentVerticalAlignment = UIControlContentVerticalAlignment.center 
     self.tagTextfield.delegate = self 
     view.addSubview(tagTextfield) 
    } 

    override func viewDidLayoutSubviews() { 
     self.addTagButton.frame = CGRect(x: 10.0, y: self.view.frame.height - 77.0, width: self.view.frame.width - 20.0, height:72.0) 
     self.addTagButton.layer.cornerRadius = self.addTagButton.frame.width/80 
     self.tagTextfield.frame = CGRect(x: 10.0, y: 5.0, width: self.view.frame.width - 20.0, height:72.0) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @objc private func addTag() { 
     //Database service code here... 
     print("in addTag .........") 
     //This will go where service is done and it is successful 
    } 

    internal func textFieldDidBeginEditing(_ textField: UITextField) { //delegate method 
     // 
    } 

    internal func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { //delegate method 
     return false 
    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { //delegate method 
     textField.resignFirstResponder() 

     return true 
    } 
} 

在我的主要UIViewController - 它被加載像這樣,點擊按鈕。它被裝精 - 我只是展示瞭如何我在這裏做layer,以及它是如何初始化:

@objc private func openManualTag() { 
     let frameHeightAdjusted = self.view.frame.height - 5/8 * self.view.frame.height 
     let manualTag = ManualTagController() 
     manualTag.view.layer.shadowColor = UIColor.black.cgColor 
     manualTag.view.layer.shadowOpacity = 0.3 
     manualTag.view.layer.shadowOffset = CGSize.zero 
     manualTag.view.layer.shadowRadius = 5 
     manualTag.view.layer.masksToBounds = true 
     manualTag.view.clipsToBounds = false 
     manualTag.view.layer.shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 159)).cgPath 
     manualTag.view.tag = 1 
     manualTag.view.frame = CGRect(x: 0, y: frameHeightAdjusted, width: self.view.frame.width, height: 159.0) 
     manualTag.view.transform = CGAffineTransform(translationX: 0, y: -frameHeightAdjusted - 159) 

     DispatchQueue.main.async { 
      self.view.addSubview(manualTag.view) 
      UIView.animate(withDuration: 0.5, animations: { 
       manualTag.view.transform = .identity 
      }) 
     } 
    } 

的問題既不是UIButton也不UITextField將工作......既不是竊聽他們作出迴應無論如何。我究竟做錯了什麼?

UPDATE

發佈所有的ViewController,我的主視圖控制器,只是櫃面:

import UIKit 
import GoogleMaps 


class ViewController: UIViewController, CLLocationManagerDelegate { 
    let locationManager = CLLocationManager() 
    var center = CLLocationCoordinate2D() 
    let tagButton = TagButton() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.tagButton.addTarget(self, action: #selector(openManualTag), for: .touchUpInside) 
     self.tagButton.backgroundColor = UIColor(red: 200.0/255, green: 17.0/255, blue: 57.0/255, alpha: 0.5) 
     self.tagButton.layer.shadowColor = UIColor.black.cgColor 
     self.tagButton.layer.shadowPath = UIBezierPath(roundedRect: self.tagButton.bounds, cornerRadius: self.tagButton.frame.width/2).cgPath 
     self.tagButton.layer.shadowOffset = CGSize.zero 
     self.tagButton.layer.shadowOpacity = 0.3 
     self.tagButton.layer.shadowRadius = 5 
     self.tagButton.layer.masksToBounds = true 
     self.tagButton.clipsToBounds = false 
     self.tagButton.layer.borderWidth = 5 
     self.tagButton.layer.borderColor = UIColor.white.cgColor 
     view.addSubview(self.tagButton); 
    } 

    override func viewDidLayoutSubviews() { 
     //let tagButton = view.viewWithTag(0) 
     self.tagButton.frame = CGRect(x: self.view.frame.width/2 - 36, y: self.view.frame.height - 0.2 * self.view.frame.height, width: 72.0, height: 72.0) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func loadView() { 
     let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0) 
     let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) 
     view = mapView 
    } 

    func addMarker(tag: String) { 
     self.locationManager.startUpdatingLocation(); 
     let marker = GMSMarker() 
     marker.position = CLLocationCoordinate2D(latitude: self.center.latitude, longitude: self.center.longitude) 
     marker.title = tag 
     //marker.snippet = //USERNAME 
     DispatchQueue.main.async { 
      marker.map = self.view as? GMSMapView 
     } 
    } 

    @objc private func openManualTag() { 
     let frameHeightAdjusted = self.view.frame.height - 5/8 * self.view.frame.height 
     let manualTag = ManualTagController() 
     manualTag.view.layer.shadowColor = UIColor.black.cgColor 
     manualTag.view.layer.shadowOpacity = 0.3 
     manualTag.view.layer.shadowOffset = CGSize.zero 
     manualTag.view.layer.shadowRadius = 5 
     manualTag.view.layer.masksToBounds = true 
     manualTag.view.clipsToBounds = false 
     manualTag.view.layer.shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 159)).cgPath 
     manualTag.view.tag = 1 
     manualTag.view.frame = CGRect(x: 0, y: frameHeightAdjusted, width: self.view.frame.width, height: 159.0) 
     manualTag.view.transform = CGAffineTransform(translationX: 0, y: -frameHeightAdjusted - 159) 

     let transparencyButton = UIButton(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)) 
     transparencyButton.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha:0.4); 
     transparencyButton.addTarget(self, action: #selector(dismissHelper(sender:)), for: .touchUpInside) 

     DispatchQueue.main.async { 
      self.addChildViewController(manualTag) 
      self.view.addSubview(manualTag.view) 
      manualTag.didMove(toParentViewController: self) 

      UIView.animate(withDuration: 0.5, animations: { 
       manualTag.view.transform = .identity 
      }) 

      self.view.insertSubview(transparencyButton, belowSubview: manualTag.view) 
     } 
    } 

    @objc func dismissHelper(sender: UIButton) 
    { 
     self.view.viewWithTag(1)?.removeFromSuperview() 
     sender.isHidden = true; 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     self.locationManager.delegate = self 
     self.locationManager.requestWhenInUseAuthorization() 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.locationManager.startUpdatingLocation() 
    } 

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { 
     print("Error" + error.localizedDescription) 
    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let userLocation = locations.last 
     self.center = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude) 

     let mapView = view as! GMSMapView 
     DispatchQueue.main.async { 
      mapView.camera = GMSCameraPosition.camera(withLatitude: self.center.latitude, longitude: self.center.longitude, zoom: 14.0) 
     } 

     print("Latitude :- \(userLocation!.coordinate.latitude)") 
     print("Longitude :-\(userLocation!.coordinate.longitude)") 

     self.locationManager.stopUpdatingLocation() 
    } 
} 
+0

是否將'isUserInteractionEnabled'屬性設置爲true? – Xcoder

+0

謝謝,但它並沒有幫助 – ewizard

+0

當它打開時,屏幕響應我手動標記視圖外的水龍頭 – ewizard

回答

1

當你添加一些其他的視圖控制器的視圖到當前的VC,你必須首先添加將控制器視爲您當前的控制器。這樣的UIKit將提供全觸控以及其他VC相關事件正確子視圖控制器:

DispatchQueue.main.async { 
    self.addChildViewController(manualTag) 
    self.view.addSubview(manualTag.view) 
    manualTag.didMove(toParentViewController: self) 

    UIView.animate(withDuration: 0.5, animations: { 
     manualTag.view.transform = .identity 
    }) 
} 

此外,我不建議你修改一個UIViewController的「視圖」屬性。這可能會導致不同的問題,例如不響應您的UITextField或Autolayout崩潰。只需添加您的地圖爲全屏幕子視圖中viewDidLoad方法:

super.viewDidLoad() 

let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0) 
let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) 
mapView.frame = view.bounds 
view.addSubview(mapView) 

而且不要忘記刪除你的loadView硬道理()方法!

+0

謝謝!解決了manualTag ....上的按鈕,但UITextField仍然沒有響應 – ewizard

+0

,因此UITextField委託方法沒有被調用,對吧? –

+0

鍵盤永不出現...生病記錄方法 – ewizard

相關問題