2016-10-04 15 views
-1

各セルにテキストのハードコードされたUILabelを塗りつぶしたTableViewがあるページがあります。私はオンラインで入手できるJSONからUILabelsを補充したいと思います。JSONからのタイトルのロードテーブル

絵コンテ: enter image description here

コード:

import UIKit 

class ViewController: UIViewController { 
@IBOutlet weak var tableView: UITableView! 

var objects: NSMutableArray! = NSMutableArray() 

override func viewDidLoad(){ 
super.viewDidLoad() 

self.objects.add("iPhone") 
self.objects.add("Apple Watch") 
self.objects.add("Mac") 
self.objects.add("Test") 
self.tableView.reloadData() 

} 

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

func numberOfSectionsInTableView(_ tableView: UITableView) -> Int{ 
return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
return self.objects.count 
} 

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell{ 

let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell 

cell.titleLabel.text = self.objects.object(at: (indexPath as NSIndexPath).row) as? String 
//cell.logButton.tag = (indexPath as NSIndexPath).row; 
//cell.logButton.addTarget(self, action: #selector(ViewController.logAction(_:)), for: .touchUpInside) 
return cell 
} 

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath){ 
self.performSegue(withIdentifier: "showView", sender: self) 
} 

@IBAction func logAction(_ sender: UIButton) { 
let titleString = self.objects[sender.tag] as? String 
let firstActivityItem = "\(titleString!)" 
let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [firstActivityItem], applicationActivities: nil) 

self.present(activityViewController, animated: true, completion: nil) 

} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?){ 
if (segue.identifier == "showView"){ 
      let upcoming: NewViewController = segue.destination as! NewViewController 

      let indexPath = self.tableView.indexPathForSelectedRow! 

      let titleString = self.objects.object(at: indexPath.row) as? String 

      upcoming.titleString = titleString 

      self.tableView.deselectRow(at: indexPath, animated: true) 
     } 

    } 

} 

一度シミュレータで、私はページを開く、テーブルビューを追加することにして何に変更し、「ラベル」と4つのセルを持つことになりますobjects配列(この場合、iPhone、Apple Watch、Mac、およびTestです)。それらをハードコード化するのではなく、JSONファイルからロードするようにしたいと思います。

私はPickerViewを使って同じことをしましたが、私はこれをどのように行うかを考え出すのに苦労しています。

:。

if let JSON = response.result.value as? [String:AnyObject] { 


self.mypickerview.delegate = self 
self.mypickerview.dataSource = self 
let result = JSON.values.flatMap({ String(describing: $0) }) 
self.pickerData.append(contentsOf: result) 
self.pickerData.sort() 
self.verbose.text = "Content saved!" 
self.mypickerview.reloadAllComponents() 
self.mypickerview.delegate = self; 
self.verbose.text = "Finished Loading!" 

} 
} 

JSONファイル内

Alamofire.request( "example.com/file.json")responseJSON {応答:ここでは、それは場合に役立ちますそれは私のPickerViewで行われていた方法です

{"One":"Mac","Two":"Apple iPhone","Three":"Test"} 
+0

は、あなたが何をしようとしたことがありますか?基本的にPickerViewで行われる処理と同じです。 – Caleb

+0

@CalebこれはNSMutableArrayと同じコードは 'var pickerData:[String] = [String]()'のように動作しませんので、単純にNSMutableArrayをいくつかのコードで通常の配列に変換しようとしましたが、仕事。それは空白のTableViewを示した – Matt

答えて

0

1.On viewDidLoadは、WebServiceを起動します。 2. Webサービス補完ハンドラで、ラベル値を取得してオブジェクトに割り当てます。 3.テーブルビューを再ロードします。

0

次のようになります。あなたのJSON:{ "タイトル":[ "MAC"、 "iphone"、 "テスト" ] を}

、あなたのような何かを行いますcell.titleLabel.text = [[yourJSON valueForKey:@"titles"] objectAtIndex:indexPath.row];

(これがobj-Cバージョンですが、それは迅速に行うこともできるOFC)

関連する問題