与可重用表格单元格不同的转场
Posted
技术标签:
【中文标题】与可重用表格单元格不同的转场【英文标题】:Different segues from a reusable table cell 【发布时间】:2015-04-16 08:50:02 【问题描述】:我是编程新手,在 xcode/swift 上遇到了第一个令人头疼的问题。
我制作了一个带有可重用单元格的表格视图。我将有 4 个不同的单元格,我希望这些单元格分别对另一个视图控制器执行不同的 segue。
但是,目前我似乎只能为所有返回的单元格选择一个 segue。
我尝试根据“numbersTableViewCellDidTouch”函数中的 indexPath.row 编号实现 if 语句,但不断收到一条错误消息,提示“使用未解析的标识符 IndexPath”。我猜是因为它是一个委托函数我不能在这个函数中使用 indexPath,因为 indexPath 属于导航视图控制器而不是单元格。
对于如何根据返回的单元格的位置执行不同的 segues,我摸不着头脑......谁能帮忙?
仅供参考,我已经为我的表格视图控制器复制了下面的代码。
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)
【问题讨论】:
【参考方案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
【讨论】:
太棒了!完美运行!非常感谢。【参考方案2】:似乎您不想使用动态单元格,而是使用静态单元格。 您可以通过情节提要定义静态单元格..
【讨论】:
以上是关于与可重用表格单元格不同的转场的主要内容,如果未能解决你的问题,请参考以下文章