将表视图(行选择)的数据传递给视图控制器

时间:2016-08-05 01:19:28

标签: ios swift xcode uitableview viewcontroller

mi问题是这样的:我想选择第一行,第二行...并且视图控制器必须根据所选行(标签,图像等)显示信息,我尝试了很多但是,不是工作

我使用协议和这个:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 4
}

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

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


    cell.l2.text = hname[indexPath.row]
    cell.l1.text = prename[indexPath.row]
    cell.img1.image = imgs[indexPath.row]

    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
    let selectedH = self.nin2[(indexPath as NSIndexPath).row]
    self.delegate?.HabiSelected(selectedH)
}

由于

enter image description here

2 个答案:

答案 0 :(得分:1)

好的,我将展示如何使用静态字符串数组来完成此操作。分析它以使您的代码成为您所需要的(图像,文本)

第1步:创建新项目并选择viewcontroller goto - >嵌入 - >导航控制器。然后将UITableView添加到您ViewController。然后添加一个原型单元并命名它(例如,单元格)。

第2步:创建新的UITableViewCell(newcell)可可触摸类文件。

第3步:然后转到 identity->自定义类 - > 将创建的UITableViewCell cocoa touch类文件添加到原型单元格(单元格)。然后将UILabel添加到prototye单元格中。

步骤4:创建表视图委托以查看控制器并为newcell创建标签出口,然后创建表视图以查看控制器。

第5步:将新的UIViewController添加到故事板以进行collectionView,并按照UITableView

的类似方法

步骤6:从viewcontroller创建push Segue到集合viewcontroller并命名segue。

之后,将以下代码添加到具有表View的视图控制器。

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{


@IBOutlet var tableView: UITableView! //Outlets of table View

var titles = ["Michael Jackson","Taylor Swift","Katy Perry","Avril Lavigne"] //static Array

override func viewDidLoad() {
super.viewDidLoad()

}

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

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableCell
cell.TitlesLabel.text = titles[indexPath.row]
return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

performSegueWithIdentifier("collectionSegue", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

let index = self.tableView.indexPathForSelectedRow
let indexNumber = index?.row //0,1,2,3
let vc = segue.destinationViewController as! collectionViewController
vc.title = titles[indexNumber!] //NavigationItem.title on collectionViewController
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()

}
}

将以下代码添加到您的集合视图控制器。

import UIKit

class collectionViewController: UIViewController, UICollectionViewDataSource,UICollectionViewDelegate{


@IBOutlet var collectionView: UICollectionView!

var collectionTitles = ["Hi","Hello","Hola","Ni hao"]
var taylorSwift = ["Speak Now","Red","Love Story","Blank Space"]
var thirdlabel = ["Jack","Sparrow","William","Mohan Singh"]
var fourthlabel = ["Namasta","Vanakkam","Tamil","Hindi"]


override func viewDidLoad() {
super.viewDidLoad()

}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return taylorSwift.count
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

let cell = self.collectionView.dequeueReusableCellWithReuseIdentifier("cell2", forIndexPath: indexPath) as! CollectionViewControllerCell
let identity = navigationItem.title
print(title)

if identity == "Michael Jackson"
{
cell.collectionLabel.text = collectionTitles[indexPath.row]
}
else if identity == "Taylor Swift"
{
cell.collectionLabel.text = taylorSwift[indexPath.row]
}
else if identity == "Katy Perry"
{
cell.collectionLabel.text = thirdlabel[indexPath.row]
}
else
{
cell.collectionLabel.text = fourthlabel[indexPath.row]
}
return cell
}
}

答案 1 :(得分:0)

您应该以编程方式为您提供的下一个视图控制器创建实例,并将信息传递给该视图控制器,如此

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCellF
    let nextVC = self.storyboard?.instantiateViewControllerWithIdentifier("your identifier") as! YourCustomViewController
    nextVC.yourVariable = cell.theInfoYouWhatToPass

    self.presentViewController(nextVC, animated: true, completion: nil)
}

现在,您的nextVC实例将拥有您需要存储在yourVariable

中的信息