簡體   English   中英

在Alamofire中,僅調用UINavigationController! 沒有其他回應

[英]In Alamofire only the UINavigationController is called! no other response

我正在使用本教程自動完成Google地方信息。

我已經通過cocoapads安裝了alamofire和swiftyJSON。

我的問題是,當我在搜索欄中輸入文字時,什么也沒發生。

在我的ViewControlller上:

    let gpaViewController = GooglePlacesAutocomplete(
    apiKey: "MY-API-KEY",
    placeType: .Address
    )

    gpaViewController.placeDelegate = self

    presentViewController(gpaViewController, animated: true, completion: nil)

在我的GooglePlacesAutoComplete視圖控制器上:

import UIKit
import Alamofire
import SwiftyJSON

enum PlaceType: CustomStringConvertible {
case All
case Geocode
case Address
case Establishment
case Regions
case Cities

var description : String {
    switch self {
    case .All: return ""
    case .Geocode: return "geocode"
    case .Address: return "address"
    case .Establishment: return "establishment"
    case .Regions: return "regions"
    case .Cities: return "cities"
    }
}
}

struct Place {
    let id: String
    let description: String
}

protocol GooglePlacesAutocompleteDelegate {
    func placeSelected(place: Place)
    func placeViewClosed()
}    

僅將此代碼集稱為:

class GooglePlacesAutocomplete: UINavigationController {

var gpaViewController: GooglePlacesAutocompleteContainer?

var placeDelegate: GooglePlacesAutocompleteDelegate? {
    get { return gpaViewController?.delegate }
    set { gpaViewController?.delegate = newValue }
}

convenience init(apiKey: String, placeType: PlaceType = .All) {
    let gpaViewController = GooglePlacesAutocompleteContainer(
        apiKey: apiKey,
        placeType: placeType
    )

    self.init(rootViewController: gpaViewController)
    self.gpaViewController = gpaViewController

    let closeButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop, target: self, action: "close")

    gpaViewController.navigationItem.leftBarButtonItem = closeButton
    gpaViewController.navigationItem.title = "Enter Address"
}

func close() {
    placeDelegate?.placeViewClosed()
}

}

沒有跡象表明:

class GooglePlaceSearchDisplayController: UISearchDisplayController {
override func setActive(visible: Bool, animated: Bool) {
    if active == visible { return }

    searchContentsController.navigationController?.navigationBarHidden = true
    super.setActive(visible, animated: animated)

    searchContentsController.navigationController?.navigationBarHidden = false

    if visible {
        searchBar.becomeFirstResponder()
    } else {
        searchBar.resignFirstResponder()
    }
}
}
// MARK: - GooglePlacesAutocompleteContainer
class GooglePlacesAutocompleteContainer: UIViewController {
    var delegate: GooglePlacesAutocompleteDelegate?
    var apiKey: String?
    var places = [Place]()
    var placeType: PlaceType = .All

convenience init(apiKey: String, placeType: PlaceType = .All) {
    self.init(nibName: "GooglePlacesAutocomplete", bundle: nil)
    self.apiKey = apiKey
    self.placeType = placeType
}

override func viewDidLoad() {
    super.viewDidLoad()

    let tv: UITableView? = searchDisplayController?.searchResultsTableView
    tv?.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")

}

}

或這個:

// MARK: - GooglePlacesAutocompleteContainer (UITableViewDataSource / UITableViewDelegate)
extension GooglePlacesAutocompleteContainer: UITableViewDataSource, UITableViewDelegate {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return places.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.searchDisplayController?.searchResultsTableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell?

    // Get the corresponding candy from our candies array
    let place = self.places[indexPath.row]

    // Configure the cell
    cell!.textLabel!.text = place.description
    cell!.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator

    return cell!
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    delegate?.placeSelected(self.places[indexPath.row])
}
}

// MARK: - GooglePlacesAutocompleteContainer (UISearchDisplayDelegate)
 extension GooglePlacesAutocompleteContainer: UISearchDisplayDelegate {
    func searchDisplayController(controller: UISearchDisplayController, shouldReloadTableForSearchString searchString: String!) -> Bool {
    getPlaces(searchString)
    return false
}

private func getPlaces(searchString: String) {
    let url = "https://maps.googleapis.com/maps/api/place/autocomplete/json"
    Alamofire.request(.GET, url).responseJSON { response in
        switch response.result {
        case .Success(let data):
            let json = JSON(data)
            let name = json["name"].stringValue
            print(name)
        case .Failure(let error):
            print("Request failed with error: \(error)")
        }
    }
}
}

對長代碼表示歉意。 不確定,我在哪里弄錯了。 我還在searchBar中為searchBar設置了searchBar ,我仔細檢查了Cocoapads,Alamofire和SwiftyJson的安裝。 有人可以幫幫我嗎? 我是這些東西的新手。

您必須像這樣使UISearchBar對象...

lazy var searchBar : UISearchBar = UISearchBar()

中載

searchBar.delegate = self

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM