我是编程新手,在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)
}
答案 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)
好像你不想使用动态单元格,而是使用静态单元格。 您可以通过故事板定义静态单元格。