TableView Cell单击另一个TableView

时间:2015-08-07 17:01:19

标签: uitableview tableview viewcontroller swift2

我的应用上有tableView。我想点击一个单元格,然后转到另一个tableView。例如,艺术家列表,然后是专辑列表。

通常我只是拖动" Prototype Cells"到另一个视图控制器。但没有任何反应。

这是我的代码:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return NumberOfArtists
}

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

    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")

    print(NameOfArtist)

    cell.textLabel?.text = NameOfArtist[indexPath.row]
    cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator

    return cell

}

这是我的故事板:

更新:我已从TableView(后面的那个)中删除了segue。仍然没有工作。

enter image description here

步骤

1 - 创建tableView并添加源和委托。 2 - 创建另一个View Controller并添加tableView。 3 - 从第一个原型单元格到第二个tableView创建一个segue。

什么都没发生。

3 个答案:

答案 0 :(得分:1)

2015年8月13日编辑

  1. 你必须像艺术家提到的那样创建一个UITableView。
  2. 您创建它需要另一个UITableView作为相册'艺术家。
  3. 您只需要将原型单元格或所有静态单元格中的segue链接到UITableView,它应该可以工作。
  4. 注意:这是管理故事板的方法。我没有包括如何填充数据和管理UITableView

答案 1 :(得分:1)

我查看了您发布到Dropbox的代码。这是您的代码出了什么问题:

  1. 您需要将主视图控制器嵌入导航控制器中。您可以通过单击故事板中的主视图控制器,然后单击编辑器 - >来完成此操作。嵌入 - >导航控制器选项。

  2. 您在cellForRowAtIndexPath方法中创建的单元格与您在故事板中附加segue的单元格不同。您可以像这样创建单元格:

     let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
    
  3. 这实际上创建了一个具有重用标识符“Cell”的全新单元格。它没有附加的segue。要做到这一点:

    let cell : UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("Cell");
    

    这将获取故事板中的单元格。 希望这会有所帮助。

答案 2 :(得分:1)

我认为您不需要两个viewController,根据您的设计,您可以同时为ArtistAlbum控制器使用First tableView和Cell。

与使用tableView Delegate方法相比,您只需要两个DataSource 1个艺术家和另一个Album一个布尔值来管理Current Visible DataSource。可以同时管理Artist和Album View。

例如: 假设我们的布尔值NameisArtistisArtist = true代表Artist ViewisArtist = false代表Album View

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return isartist ? ArtistDataSource.Count : AlbumDataSource.count
}

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

    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")

 if isArtist {
    cell.textLabel?.text = ArtistDataSource[indexPath.row]
 }
else {
    cell.textLabel?.text = AlbumDataSource[indexPath.row]
 }


    cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator

    return cell

}


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

          if isArtist {
            isartist.toggle()
            yourtableView.reloadData
          }
          else {
       //Do what you wish for Album tableView Selection
      }
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return isartist ? 70 : 100
    }