2017-03-24 13 views
0

私はこのようなことをしたい、私はJSの各データ(PHPから)をテーブルの各セルに表示したい。 JSONデータにはテキストとイメージが含まれています。今私はテキストを表示することができますが、イメージを抽出することができません。たとえば、Section:New Meter Detailsに画像を表示したいのに対し、他のセルにはまだテキストを表示することができます。 テキストと画像の両方にテーブルビューセルを再利用する方法はありますか?アドバイスをお願いします。これは私のJSONデータであると私はすでに迅速辞書のように変更します。Swift JSON - テキストとイメージの両方でTableViewセルを再利用

["cp_replacemeter": 1, "cp_current_l3": 3, "cp_voltage_l2": 2221, "cp_tktno": 3333, "ap_contact_no": 998, "cpremark": , "cp_voltage_l3": 2221, "cprefno": 17-0762, "cp_oldmeter_img": images/17-0762/222.jpg, "cpfaultyremark": , "co_id": 15, "cp_customer_signature": images/17-0762/17-0762-CustomerSign.jpg, "cp_meter_cover": Cover Broken, "error": 0, "cp_new_tariff": 1, "cp_service_type": CHANGE METER;, "cprtm_name": CONLOG, "cpi_no": 15670, "cp_meter_seal": Seals Broken, "cpcontact_no": 3331, "cpserviceremark": , "tag": search, "cptm_name": PRESSEY, "cplatitude": 3.12312, "cp_AddPhoto3": images/17-0762/other/17-0762-photo3.jpg, "cpt_of_meter": 3 Phase, "cplongitude": 110.86275, "cp_voltage_l1": 2221, "cp_AddPhoto2": images/17-0762/other/17-0762-photo2.jpg, "cp_AddPhoto5": images/17-0762/other/17-0762-photo5.jpg, "cpDistrict": KB, "cpc_name": 221, "cp_newmeter_img": images/17-0762/1.jpg, "cpaddress": 331, "cp_AddPhoto4": images/17-0762/other/17-0762-photo4.jpg, "cp_fault_type": METER HANG;, "cpr_tometer": 1 PHASE, "cp_old_tariff": 1, "cp_AddPhoto6": images/17-0762/other/17-0762-photo6.jpg, "cpic_no": 3331, "cp_current_l1": 1, "cp_AddPhoto1": images/17-0762/other/17-0762-photo1.jpg, "cpm_no": 222, "cp_current_l2": 2] 

import UIKit 

class MyTableViewController: UITableViewController { 

struct Objects { 
    var sectionName : String! 
    var sectionObject : [String]! 
} 

var objectsArray = [Objects]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.rowHeight=UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 100 
    LoadJsonData() 
} 

func LoadJsonData() { 


    let request = NSMutableURLRequest(url: NSURL(string:"http://<myphpaddress>appcpapi.php")! as URL) 
    request.httpMethod = "POST" 

    let poststring = "tag=search&refno=17-0762" 

    request.httpBody = poststring.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in 

     if error != nil 
     { 
      print("error= \(error)") 
      return 
     } 
     else 
     { 
      do{ 
       let dictionary = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : Any] 

       let ticket = dictionary["cp_tktno"] ?? "No data" 
       let name = dictionary["cpc_name"] ?? "No data" 
       let customerIC = dictionary["cpic_no"] ?? "No data" 
       let district = dictionary["cpDistrict"] ?? "No data" 
       let customercontact = dictionary["cpcontact_no"] ?? "No data" 
       let address = dictionary["cpaddress"] ?? "No data" 
       let latitudeGPS = dictionary["cplatitude"] ?? "No data" 
       let longitudeGPS = dictionary["cplongitude"] ?? "No data" 
       let om = dictionary["cpm_no"] ?? "No data" 
       let omtariff = dictionary["cp_old_tariff"] ?? "No data" 
       let ombrand = dictionary["cptm_name"] ?? "No data" 
       let omtype = dictionary["cpt_of_meter"] ?? "No data" 
       let omfaulty = dictionary["cp_fault_type"] ?? "No data" 
       let omseal = dictionary["cp_meter_seal"] ?? "No data" 
       let omcover = dictionary["cp_meter_cover"] ?? "No data" 
       let nm = dictionary["cp_replacemeter"] ?? "No data" 
       let nmtariff = dictionary["cp_new_tariff"] ?? "No data" 
       let nmbrand = dictionary["cprtm_name"] ?? "No data" 
       let nmtype = dictionary["cpr_tometer"] ?? "No data" 
       let nmservice = dictionary["cp_service_type"] ?? "No data" 
       let v1 = dictionary["cp_voltage_l1"] ?? "No data" 
       let v2 = dictionary["cp_voltage_l2"] ?? "No data" 
       let v3 = dictionary["cp_voltage_l2"] ?? "No data" 
       let a1 = dictionary["cp_current_l1"] ?? "No data" 
       let a2 = dictionary["cp_current_l2"] ?? "No data" 
       let a3 = dictionary["cp_current_l3"] ?? "No data" 
       let contractorID = dictionary["co_id"] ?? "No data" 
       let contractorcontact = dictionary["ap_contact_no"] ?? "No data" 
       let faultyremark = dictionary["cpfaultyremark"] ?? "No data" 
       let serviceremark = dictionary["cpserviceremark"] ?? "No data" 

       let newmeterimageurl = NSURL(string:"\(dictionary["cp_newmeter_img"]!)")! 
       let newmeterimagedata = NSData(contentsOf: newmeterimageurl as URL) 
       let MyWantedToShowImage = UIImage(data: newmeterimagedata! as Data) 

       DispatchQueue.main.async { 
        self.objectsArray = [MyTableViewController.Objects(sectionName: "Customer Details", 
                     sectionObject:[ 
                     "Ticket No \n\(ticket)", 
                     "Name \n\(name)", 
                     "Customer Contact \n\(customercontact)", 
                     "Customer IC \n\(customerIC)", 
                     "Address \n\(address)", 
                     "District:\n\(district)", 
                     "Latitude GPS\n\(latitudeGPS)", 
                     "Longitude GPS \n\(longitudeGPS)"]), 
             MyTableViewController.Objects(sectionName: "Old Meter Details", 
                     sectionObject:[ 
                     "Old Meter Number \n\(om)", 
                     "Old Meter Tariff \n\(omtariff)", 
                     "Old Meter Brand \n \(ombrand)", 
                     "Old Meter Type \n\(omtype)", 
                     "Old Meter Faulty \n\(omfaulty)", 
                     "Old Meter Seal \n\(omseal)", 
                     "Old Meter Cover \n\(omcover)"]), 
             MyTableViewController.Objects(sectionName: "New Meter Details", 
                     sectionObject:[ 
                     "New Meter Number \n\(nm)", 
                     "New Meter Tariff \n\(nmtariff)", 
                     "New Meter Brand \n\(nmbrand)", 
                     "New Meter Type \n\(nmtype)", 
                     "New Meter Service \n\(nmservice)", 
                     "L1 Voltage \n\(v1)", 
                     "L2 Voltage \n\(v2)", 
                     "L3 Voltage \n\(v3)", 
                     "L1 Ampere \n\(a1)", 
                     "L2 Ampere \n\(a2)", 
                     "L3 Ampere \n\(a3)", 
                     "New Meter Image \n\(MyWantedToShowImages?.images)"]), 
             MyTableViewController.Objects(sectionName: "Customer Signature", 
                     sectionObject:[ 
                     "Contrator ID \n\(contractorID)", 
                     "Contractor Contact \n\(contractorcontact)", 
                     "Faulty Remark \n\(faultyremark)", 
                     "Service Remark \n\(serviceremark)"])] 

        self.tableView.reloadData() 
       } 

      }//Catch Error 

      catch let error{ 
       print(error) 
      } 
     } 

    } 
    task.resume() 

} 

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



override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
    return objectsArray[section].sectionObject.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as UITableViewCell! 

    cell?.textLabel?.numberOfLines = 0 
    cell?.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping 
    cell?.textLabel?.text = objectsArray[indexPath.section].sectionObject[indexPath.row] 
    cell?.textLabel?.font = UIFont.systemFont(ofSize: 13, weight: 0.2) 
     return cell! 
} 

override func numberOfSections(in tableView: UITableView) -> Int{ 
    return objectsArray.count 
} 

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?{ 

    return objectsArray[section].sectionName 
} 


} 

答えて

0

あなたが画像とは別にテキストを表示したい場合、あなたはイメージのため、あなたのストーリーボード内の別のセルのプロトタイプを設定する必要があると思います。それに異なるセル識別子を割り当て、あなたは画像セルを必要とするとき、あなたはここで何に似て新しいセル識別子、使用して作成します:あなたが1つのテーブルセル内のテキストと画像の両方が必要な場合

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as UITableViewCell! 

を両方に対応するには、既存のプロトタイプを変更するだけです。追加情報が必要な場合はお知らせください。

+0

私はあなたの提案/アドバイスを自分自身で最初に試してみたいです。私は試した後にあなたにもう一度お知らせします。 – Yuan

+0

確かな事:)私に何か助けが必要な場合は、ここに返信して返信します。 – Fahim

+0

こんにちは、私は、テキストと画像を区別するために別のセル識別子を設定することについてネット上で検索しました。しかし、私はどのようにテーブルをリロードするかわかりません。テーブル内の2つの異なるセルを使用しているため、どの構造体varを実装するかを知るにはどうすればよいでしょうか?たとえば、コードに書かれているようにテキストを表示したいのですが、「New Meter Details」セクションでは、そのセクションの最後の行に画像を追加します。その後、テキストで始まる別のセクションに進みます。テキストや画像が来ているかどうかはどうすればいいですか? – Yuan

関連する問題