2016-10-04 3 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) 
     } 

    } 

} 
시뮬레이터 일단

내가 페이지를 열어이의의 TableView는 "라벨"로 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. 웹 서비스 완료 핸들러에서 레이블 값을 검색하고 오브젝트에 지정하십시오. 3. 테이블 뷰를 다시로드하십시오.

0

다음과 같아야합니다 당신의 JSON : { "제목"[ "맥", "아이폰", "테스트" ] 을}

당신은 같은 것을 할 것입니다 cell.titleLabel.text = [[yourJSON valueForKey:@"titles"] objectAtIndex:indexPath.row];

(이의 Obj-C 버전이지만,이 신속도 수행 할 수 있습니다 OFC)