2017-08-24 108 views
-2

我一直在试图制作一个项目,该项目应该包含collectionView,在从中选择一个项目后,它会跳转到另一个collectionView如何在选择didselectitem到另一个集合视图后从集合视图进行导航

import UIKit 

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 
@IBOutlet weak var myCollectionView: UICollectionView! 
var imgURLArray = [String]() 

var nameArray = [String]() 
final let urlString = "https://unembittered-vector.000webhostapp.com/JSON/alljson.txt" 
override func viewDidLoad() { 
    super.viewDidLoad() 
    self.downloadJsonWithURL() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 
func downloadJsonWithURL() { 
    let url = NSURL(string: urlString) 
    URLSession.shared.dataTask(with: (url as? URL)!, completionHandler: {(data, response, error) -> Void in 

     if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary { 
      print(jsonObj!.value(forKey: "Materials")!) 

      if let actorArray = jsonObj!.value(forKey: "Materials") as? NSArray { 
       for actor in actorArray{ 
        if let actorDict = actor as? NSDictionary { 
         if let name = actorDict.value(forKey: "name") { 
          self.nameArray.append(name as! String) 
         }/* 
         if let name = actorDict.value(forKey: "dob") { 
          self.dobArray.append(name as! String) 
         } */ 
         if let name = actorDict.value(forKey: "image") { 
          self.imgURLArray.append(name as! String) 
         } 

        } 
       } 
      } 


      OperationQueue.main.addOperation({ 
       self.myCollectionView.reloadData() 
      }) 
     } 
    }).resume() 
} 


func downloadJsonWithTask() { 

    let url = NSURL(string: urlString) 

    var downloadTask = URLRequest(url: (url as? URL)!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 20) 

    downloadTask.httpMethod = "GET" 

    URLSession.shared.dataTask(with: downloadTask, completionHandler: {(data, response, error) -> Void in 

     let jsonData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) 

     print(jsonData!) 

    }).resume() 
} 


//Number of views 
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    return imgURLArray.count 

} 

    //Populate view 
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
{ 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! myCell 
    print("test") 
    cell.nameLabel.text = nameArray[indexPath.row] 
    let imgURL = NSURL(string: imgURLArray[indexPath.row]) 

    if imgURL != nil { 
     print("check") 
     let data = NSData(contentsOf: (imgURL as? URL)!) 
     //cell.myImageView.image = UIImage(data: data as! Data) 
     cell.myImageView.image = UIImage(data: data as! Data) 

    } 
    else{ 
     print("error")} 
    //cell.myImageView.image = UIImage(named: array[indexPath.row] + ".JPG") 
    return cell 
} 

/*func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController 
    //vc.imageString = imgURLArray[indexPath.row] 
    //vc.nameString = nameArray[indexPath.row] 
    //vc.dobString = dobArray[indexPath.row] 

    //cell.myImageView.image = UIImage(named: array[indexPath.row] + ".JPG") 
    //return cell1 

    //self.navigationController?.pushViewController(vc, animated: true)  
}*/ 
} 
+0

您面临的问题是什么? – PGDev

+0

我新在ios ..我想要在点击上面的代码中的集合视图中的项目后再去另一个集合视图。 –

+0

请告诉我们你想要的东西。 –

回答

0

这里是你如何能实现你所寻找的一个例子:

1.故事板

enter image description here

2.视图控制器

import UIKit 

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    { 
     return 10 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    { 
     return collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 
    } 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    { 
     let controller = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 
     self.navigationController?.pushViewController(controller, animated: true) 
    } 
} 

class SecondViewController: UIViewController, UICollectionViewDataSource 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    { 
     return 5 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    { 
     return collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 
    } 
} 

如果您遇到任何问题,请回复。

+0

谢谢,我感谢您的回复 –

+0

您是否达到了您的要求? – PGDev

+0

你可以帮我一个集合视图的例子,它从json加载图像数据并单击视图中的项目以导航到具有集合视图的另一个页面,该视图再次从json加载数据。 @PGDev –

相关问题