2017-02-13 3 views
1

Мой вопрос: Как получить данные из PHP в UIPickerView в Swift 3.0?Как получить данные JSON в UIPickerView в Swift 3.0?

В настоящее время у меня есть этот код для UIPickerView для создания раскрывающегося списка. Прямо сейчас, я могу отобразить только значение выпадающего списка, основанный на переменной объявить в Xcode var department = ["ICTD","FAD","PSD"]

dropdown.swift

import UIKit 
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate { 
    @IBOutlet var departmentLbl: UITextField! 
    @IBOutlet var dropdownLbl: UIPickerView! 
    @IBOutlet var outputLbl: UILabel! 

    @IBOutlet var user_idLbl: UILabel! 

    var department = ["ICTD","FAD","PSD"] 

    var user_id: String! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     user_id = "ID001" // these value that need to be past to PHP 

     let url = URL(string: "http://localhost/getdepartment.php") 
     let session = URLSession.shared 
     let request = NSMutableURLRequest(url: url! as URL) 
     request.httpMethod = "POST" 
     let LoginDataToPost = "user_id=\(user_id!)" 
     request.httpBody = LoginDataToPost.data(using: String.Encoding.utf8) 
     let task = session.dataTask(with: request as URLRequest, completionHandler: { 
      (data, response, error) in 
      if error != nil { return } 
      else { 
       do { 
        if let json = try JSONSerialization.jsonObject(with: data!) as? [String: String] { 
         DispatchQueue.main.async { 
           let display  = Int(json["display"]!) 
           let realname = json["real_name"] 
           let department = json["dept"] 

           if(display == 1) { 
            // dropdown list value display here 
            return 
           } 
           else { return } 
         } 
        } 
        else { } 
       } 
       catch {} 
      } 
     }) 
     task.resume() 
    } 

    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

     var countrows : Int = department.count 
     if pickerView == dropdownLbl { 
      countrows = self.department.count 
     } 
     return countrows 
    } 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

     if pickerView == dropdownLbl { 
      let titleRow = department[row] 
      return titleRow 
     } 
     return "" 
    } 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

     if pickerView == dropdownLbl { 
      self.departmentLbl.text = self.department[row] 
      self.dropdownLbl.isHidden = true 
     } 
    } 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     if (textField == self.departmentLbl) { 
      self.dropdownLbl.isHidden = false 
     } 
    } 

} 

И у меня есть эти PHP код, который дает выход

настоящее имя и отдел

на основе user_id значение из й коды

getdepartment.php

<?php 
    $connect = mysqli_connect("","","",""); 
    global $connect; 

    if (isset($_POST['user_id'])) { 

     $user_id = $_POST['user_id']; 

     $sql = "SELECT * FROM table WHERE user_id ='$user_id'"; 
     $result = mysqli_query($connect,$sql); 
     if($result && mysqli_num_rows($result)>0){ 
      while ($row = mysqli_fetch_array($result)) { 

       $real_namedb = $row['real_name']; 
       $dept_db  = $row['dept']; 

       $output = array('real_name' => $real_namedb, 'dept' => $dept_db); 
       echo json_encode($output); 
      } 
     mysqli_free_result($result); 
     } 
     else { } 
    } 
?> 

Этого PHP дает выход данных JSON, как показано ниже:

{"display":"1","real_name":"NAME TEST 1","dept":"ICTD"} 
{"display":"1","real_name":"NAME TEST 2","dept":"ICTD"} 

признателен, если кто-то может помочь.

Спасибо.

+0

Что ошибка вы получаете ?? –

+0

На основе вашего кода вам нужно отобразить список отделов в UIPickerView. Вы должны добавить значения отдела в массив и перезагрузить UIPickerView. – KrishnaCA

+0

. Выпадающий список не появится в приложениях. @TusharSharma – Jamilah

ответ

2

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

Вы можете сделать следующие изменения и наблюдать:

if let json = try JSONSerialization.jsonObject(with: data!) as? [String: String] 
{ 
    DispatchQueue.main.async 
    { 
     let display = Int(json["display"]!) 
     let realname = json["real_name"] 
     let departmentName = json["dept"] 

     if(display == 1) { 
      // dropdown list value display here 
      self.department.append(departmentName) 
      self.dropdownLbl.reloadAllComponents() // this is reference to your pickerView. Make it global and use it 
      return 
     }else { return } 
    } 
} 

Пожалуйста, дайте мне знать, если это решает проблему или нет ...

+0

Спасибо за ответ. я попробую сначала. я дам вам знать :) – Jamilah

+1

у него есть ошибка на "" department.append (department) self.pickerView.reloadAllComponents(). можете ли вы обновить мой код выше в своем ответе? – Jamilah

+0

self.department.append (departmentName), отдел получает откуда? – Jamilah

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