ALAMOFIREを使用してデータを取得してUISEARCHBAR値に基づいてUITableViewを入力します。 -- json フィールド と swift フィールド と uitableview フィールド と uisearchbar フィールド 関連 問題

Using AlamoFire to fetch data to populate UITableView based on UISearchBar value












0
vote

問題

日本語

多くのJSON要求とは異なり、長い予定のJSONをフィルタリングする代わりに、検索バーに入力されるものに基づいてJSONリクエスト(AlamOfireを使用)を送信するつもり、したがって、JSONを解析する(Swiftyjson)。 Uibleview

を埋めるために

画像の説明を入力します。ここで

検索ターム(検索バーに入力)を使用してa alamofire要求を送信するのは Geonames Geonames API要求のクエリフィールドで検索版を使用します。すなわち

http:// api.geonames.org/searchjson?formatted=true fand.maxrows = 3&通庸; username=demo

私が基本的に行うことができないのは、検索バーに記入した後に要求を送信することです。したがって、そのデータをテーブルに入力します。

下記のP>現在のコード( "Burpham" の要求を持つ、解析されたJSONデータでのビューのロード時にテーブルを入力します。 <事前> <コード> import UIKit import Alamofire import SwiftyJSON class SearchAddLocationViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var tblJSON: UITableView! @IBOutlet weak var searchbarValue: UISearchBar! weak open var delegate: UISearchBarDelegate? var arrRes = [[String:AnyObject]]() //Array of dictionary override func viewDidLoad() { super.viewDidLoad() } public func searchBarTextDidEndEditing(_ searchBar: UISearchBar) // called when text ends editing { callAlamo(searchTerm: searchbarValue.text!) } func callAlamo(searchTerm: String) { Alamofire.request("http://api.geonames.org/searchJSON?q=(searchTerm)&maxRows=5&username=garethallenstringer").responseJSON { (responseData) -> Void in if((responseData.result.value) != nil) { let swiftyJsonVar = JSON(responseData.result.value!) if let resData = swiftyJsonVar["geonames"].arrayObject { self.arrRes = resData as! [[String:AnyObject]] } if self.arrRes.count > 0 { self.tblJSON.reloadData() } } } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "addLocProtoCell")! var dict = arrRes[indexPath.row] cell.textLabel?.text = dict["name"] as? String cell.detailTextLabel?.text = dict["countryName"] as? String return cell } public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return arrRes.count } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
英語

Unlike many JSON requests, instead of filtering a long pre-determined JSON, I intend to send a JSON request (using AlamoFire) based on what is typed into a Search Bar, thus fetching the JSON to be parsed (with SwiftyJSON) to fill the UITableView

enter image description here

What I'd like to do is to use the searchTerm (typed into the searchbar) to send an AlamoFire request to Geonames using the searchTerm in the query field of geonames API request. i.e.

http://api.geonames.org/searchJSON?formatted=true&q=(searchTerm)&maxRows=3&username=demo

What I essentially cannot do is send the request AFTER filling out the Search Bar, and therefore populate the table with that data.

Below is my current code (which populates the table upon the view loading with parsed JSON data with a request for "burpham"

import UIKit import Alamofire import SwiftyJSON  class SearchAddLocationViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {  @IBOutlet weak var tblJSON: UITableView!  @IBOutlet weak var searchbarValue: UISearchBar!  weak open var delegate: UISearchBarDelegate?  var arrRes = [[String:AnyObject]]() //Array of dictionary  override func viewDidLoad() {     super.viewDidLoad() }  public func searchBarTextDidEndEditing(_ searchBar: UISearchBar) // called when text ends editing {     callAlamo(searchTerm: searchbarValue.text!) }  func callAlamo(searchTerm: String) {     Alamofire.request("http://api.geonames.org/searchJSON?q=(searchTerm)&maxRows=5&username=garethallenstringer").responseJSON { (responseData) -> Void in         if((responseData.result.value) != nil) {             let swiftyJsonVar = JSON(responseData.result.value!)              if let resData = swiftyJsonVar["geonames"].arrayObject {                 self.arrRes = resData as! [[String:AnyObject]]             }             if self.arrRes.count > 0 {                 self.tblJSON.reloadData()             }         }     } }  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {     let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "addLocProtoCell")!     var dict = arrRes[indexPath.row]     cell.textLabel?.text = dict["name"] as? String     cell.detailTextLabel?.text = dict["countryName"] as? String     return cell }  public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {     return arrRes.count }  override func didReceiveMemoryWarning() {     super.didReceiveMemoryWarning()     // Dispose of any resources that can be recreated. }  } 
</div
           

回答リスト

1
 
vote
vote
ベストアンサー
 

あなたは、<コード> UITableView を

を移入するためのUISearchBarデリゲートの<コード> func searchBarTextDidEndEditing(_ searchBar: UISearchBar) メソッドを聞く必要があります <事前> <コード> class ViewController: UIViewController, UISearchBarDelegate { @IBOutlet private weak var searchBar: UISearchBar? override func viewDidLoad() { super.viewDidLoad() self.searchBar?.delegate = self } //MARK: UISearchBarDelegate methods func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { //You can do your request via Alamofire to populate tableView } }

UPDATE#1

<事前> <コード> import UIKit import Alamofire import SwiftyJSON class SearchAddLocationViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate { @IBOutlet weak var tblJSON: UITableView! @IBOutlet weak var searchbarValue: UISearchBar! var arrRes = [[String:AnyObject]]() //Array of dictionary override func viewDidLoad() { super.viewDidLoad() self.searchbarValue.delegate = self } func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { // called when text ends editing { callAlamo(searchTerm: searchbarValue.text!) } func callAlamo(searchTerm: String) { Alamofire.request("http://api.geonames.org/searchJSON?q=(searchTerm)&maxRows=5&username=garethallenstringer").responseJSON { (responseData) -> Void in if((responseData.result.value) != nil) { let swiftyJsonVar = JSON(responseData.result.value!) if let resData = swiftyJsonVar["geonames"].arrayObject { self.arrRes = resData as! [[String:AnyObject]] } if self.arrRes.count > 0 { self.tblJSON.reloadData() } } } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "addLocProtoCell")! var dict = arrRes[indexPath.row] cell.textLabel?.text = dict["name"] as? String cell.detailTextLabel?.text = dict["countryName"] as? String return cell } public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return arrRes.count } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
 

You need to listen func searchBarTextDidEndEditing(_ searchBar: UISearchBar) method of UISearchBar delegate for populating your UITableView

class ViewController: UIViewController, UISearchBarDelegate {      @IBOutlet private weak var searchBar: UISearchBar?      override func viewDidLoad() {         super.viewDidLoad()          self.searchBar?.delegate = self     }      //MARK: UISearchBarDelegate methods     func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {        //You can do your request via Alamofire to populate tableView     } } 

UPDATE #1

import UIKit import Alamofire import SwiftyJSON  class SearchAddLocationViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {      @IBOutlet weak var tblJSON: UITableView!      @IBOutlet weak var searchbarValue: UISearchBar!      var arrRes = [[String:AnyObject]]() //Array of dictionary      override func viewDidLoad()     {         super.viewDidLoad()         self.searchbarValue.delegate = self     }      func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { // called when text ends editing     {         callAlamo(searchTerm: searchbarValue.text!)     }      func callAlamo(searchTerm: String)     {         Alamofire.request("http://api.geonames.org/searchJSON?q=(searchTerm)&maxRows=5&username=garethallenstringer").responseJSON { (responseData) -> Void in             if((responseData.result.value) != nil) {                 let swiftyJsonVar = JSON(responseData.result.value!)                  if let resData = swiftyJsonVar["geonames"].arrayObject {                     self.arrRes = resData as! [[String:AnyObject]]                 }                 if self.arrRes.count > 0 {                     self.tblJSON.reloadData()                 }             }         }     }      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {         let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "addLocProtoCell")!         var dict = arrRes[indexPath.row]         cell.textLabel?.text = dict["name"] as? String         cell.detailTextLabel?.text = dict["countryName"] as? String         return cell     }      public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int     {         return arrRes.count     }      override func didReceiveMemoryWarning()     {         super.didReceiveMemoryWarning()         // Dispose of any resources that can be recreated.     }  } 
</div
 
 
       
       

関連する質問

0  名前を参照してデータを削除する方法は、その名前を参照して異なるNSMutableRArrayに保存されますか?  ( How to delete data from same named but stored in different nsmutablerarray by re ) 
私は私が検索&ampを提供したテーブルビューを1つ作成しました。施設を削除します。私の問題は、私がモードを検索していないとき、データは正しく&amp削除される予定です。データを削除した後にテーブルを正しく表示します。しかし、私の問題は私がオリジナルで2つのNS...

8  iOSはUisearchBarのキャンセルボタンのタイトルを変更します  ( Ios change the title of cancel button in uisearchbar ) 
キャンセルボタンのタイトルをiOSのタイトルを変更します。私は以前にこれを使っています: <事前> <コード> - (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController ...

20  iPhone UisearchBar Doneボタンは常に有効になりました  ( Iphone uisearchbar done button always enabled ) 
UIViewController で UIViewController を持っています。私は検索ボタンを完了ボタンで置き換えました。 しかしながら、検索バーに1つのタップすると、最初は disabled です。これは、任意の文字が入るまで発生します。 私が...

0  簡単な検索表示コントローラを使用しているIM  ( Im using a simple search display controller ) 
私は簡単な検索表示コントローラを使っています。私はこのエラーを得ています私はわかりません。これがコードPLSSのヘルプnありがとうございました!!!!! <事前> <コード> - (NSInteger)tableView:(UITableView *)tab...

7  iOS:UISearchBarのUIACTIVIDICATER  ( Ios uiactivityindicator in uisearchbar ) 
検索中にUISearchBarにUIACTIESINDATORを表示することは可能ですか? ...

0  iOS:数秒後にコール関数が入力を終了しました  ( Ios call function after a few seconds the user did finish typing ) 
uisearchBar関数を作成したいと思います。これは、App Storeの検索のように呼び出されます。 誰かがアイデアを持っていますか? 編集 <事前> <コード> self.currentTaskID = self.currentTask...

24  SimulatorでIOS 4.3のUITEXTFIEL AUTO CORRIXEクラッシュ  ( Uitextfield auto correction crash in ios 4 3 on simulator ) 
uitextfieldの自動補正は、iOS 4.3 SDKビルドターゲットを使用してシミュレータ上で私のアプリをクラッシュします。 IOS 4.2 SDKを使用して、デバイスとシミュレータに問題があります。 他の誰かがこの問題を経験していますか?私は4.3...

-1  UIBARBUTTONITEMとしてのUisearchBar  ( Uisearchbar as uibarbuttonitem ) 
<コード> UISearchBar として追加しました。 UIBarButtonItem (右側)。 「キャンセル」ボタンを表示する必要がありますが、表示できません。私が開発しているアプリはiPadのためのもので、Objective-Cで書かれています。 あ...

1  iPhoneのビジービュー  ( Iphone busy view ) 
検索プロセス中に表示されているビューを表示しようとしていますが、表示されていないようです。 私が達成しようとしていること ユーザーは、UisearchBarにテキストを入力したら、検索ボタンをクリックします。 入力されたテキストはSearchBarsea...

48  UisearchBarはプレースホルダーの色を変更します  ( Uisearchbar change placeholder color ) 
UisearchBarのプレースホルダテキストのテキスト色を変更する方法については、誰かがいかなるアイデアやコードサンプルを持っていますか? ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有