如何根据单击的单元格发送特定数据?

时间:2015-10-11 20:16:40

标签: ios swift

我有一系列音乐会的桌面视图,当点击x单元格时,我希望该音乐会的艺术家填充新的tableView。下面是第一个视图控制器的代码(包含所有音乐会的视图控制器)。

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {


@IBOutlet weak var tableView1: UITableView!
var arrayOfConcerts: [concert] = [concert]()


override func viewDidLoad()
{
    super.viewDidLoad()
    self.setUpConcerts()
    self.tableView1.rowHeight = 145.0
}

func setUpConcerts()
  {
    var ACL = concert(imageName: "ACL2015.png")
    let Landmark = concert(imageName: "Landmark.png")
    let BostonCalling = concert(imageName: "BostonCalling.png")
    let Lolla = concert(imageName: "Lolla.png")
    arrayOfConcerts.append(ACL)
    arrayOfConcerts.append(Landmark)
    arrayOfConcerts.append(BostonCalling)
    arrayOfConcerts.append(Lolla)

}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{
    let cell = self.tableView1.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell
    let concerts = arrayOfConcerts[indexPath.row]
    cell.setCell(concerts.imageName)

    return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    performSegueWithIdentifier("concertartist", sender: self)
}

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

}

}
  

以下是Artist View Controller的代码(第二个   视图 - 控制)。此tableView应填充特定的   艺术家。

我将如何做到这一点?

class ArtistConcerts: UIViewController, UITableViewDataSource, UITableViewDelegate {

var arrayOfArtists: [artist] = [artist]()

@IBOutlet weak var tableViewArtists: UITableView!



override func viewDidLoad() 
{
    super.viewDidLoad()
    self.setUpArtists()
}

func setUpArtists()
{

}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.tableViewArtists.dequeueReusableCellWithIdentifier("", forIndexPath: indexPath) as! CustomCell
    let artists = arrayOfArtists[indexPath.row]
    cell.setCell(artists.imageNameArtist)
    return cell
}

}

2 个答案:

答案 0 :(得分:0)

您需要在prepareForSegue方法中执行此操作。

 let vc  = segue!.destinationViewController as! ArtistConcerts

 if let rowSelected = tableView.indexPathForSelectedRow()?.row {
     vc.arrayOfArtists = artistsPerforming[0]//this is an array
 }

然后,设置在新视图控制器中实际填充tableView所需的任何数据。我不是100%肯定你想要做什么。我的回答是否有意义?

答案 1 :(得分:0)

您可以使用didSelectRowAtIndexPathprepareForSeguedidSelectRowAtIndexPath + prepareForSegue

将单元格按到另一个视图控制器后发送数据

假设你正在使用prepareForSegue,你需要的东西

  

segue标识符名称

     

将destinationController转换为您要发送数据的控制器

     

选择单元格的indexPath.row

     

然后设置应该接收数据的变量或变量或数据结构

按CTRL +从单元格拖动到另一个视图控制器时创建一个segue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{
     if segue.identifier == "Name_Of_Segue"
    {

        let destination = segue.destinationViewController as! NAME_Of_ViewController
        let indexPath =  mytableview.indexPathForSelectedRow!
        let data = arrayOfArtists[indexPath.row]

        destination.artist = data
    }

mytableview是来自tableview的IBOutlet

artist是在目标控制器中声明的变量

destination.artist = data这行代码从特定单元格传递数据,然后将其发送到目标单元格