来自可重复使用的表格单元格的不同segue

时间:2015-04-16 08:50:03

标签: ios xcode swift

我是编程新手,在xcode / swift上遇到了我的第一个头部破坏问题。

我用可重复使用的单元格制作了一个表视图。我将有4个不同的单元格,我希望每个单元格执行不同的segue到另一个视图控制器。

但是,目前我似乎只能为所有返回的单元格选择一个segue。

我尝试在我的' numbersTableViewCellDidTouch'中基于indexPath.row编号实现if语句。功能,但不断收到错误消息,说明'使用未解析的标识符IndexPath'。我猜测因为它是一个委托函数,我不能在这个函数中使用indexPath,因为indexPath属于导航视图控制器而不是单元格。

我在如何根据返回的细胞位置执行不同的细分方面摸不着头脑......有人可以帮忙吗?

仅供参考我已将我的代码复制到我的表视图控制器中。

import UIKit

class NumbersTableViewController: UITableViewController, NumbersTableViewCellDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
    tableView.estimatedRowHeight = 85
    tableView.rowHeight = UITableViewAutomaticDimension
}

@IBAction func menuButtonDidTouch(sender: AnyObject) {
    performSegueWithIdentifier("MenuSegue", sender: self)
}

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

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

    let cell = tableView.dequeueReusableCellWithIdentifier("StoryCell") as NumbersTableViewCell

    cell.titleLabel.text = numbersData[indexPath.row]["title"] as? String
    cell.summaryLabel.text = numbersData[indexPath.row]["subtitle"] as? String
    cell.articleImageView.image = UIImage(named: "cat-pic2")
    cell.delegate = self

    return cell
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    performSegueWithIdentifier("NumbersArticleSegue", sender: self)
}

//Mark: NumbersTableViewCellDelegate

func numbersTableViewCellDidTouch(cell: NumbersTableViewCell, sender: AnyObject) {
 performSegueWithIdentifier("NumbersArticleSegue", sender: self)        
}

2 个答案:

答案 0 :(得分:1)

在你的" numbersTableViewCellDidTouch"函数,参数是单元格及其发送者。没有引用indexPath,这就是你得到错误的原因。

但是有一种解决方法。使用UITableView's indexPathForCell:函数,它将为您提供所需的NSIndexPath。

所以你可以改变你的功能:

func numbersTableViewCellDidTouch(cell: NumbersTableViewCell, sender: AnyObject) {

 //indexPathForCell(_:UITableViewCell) returns a NSIndexPath?
 //if let will safely unwrap for us.
 if let indexPath = tableView.indexPathForCell(cell) 
 {
   //Run if statements to check indexPath.row
   performSegueWithIdentifier("NumbersArticleSegue", sender: self)
 }

 //Should still have a default action if indexPathForCell(_:UITableViewCell) returns a nil value 
}

答案 1 :(得分:0)

好像你不想使用动态单元格,而是使用静态单元格。 您可以通过故事板定义静态单元格。