【问题标题】:SWRevealViewController nib cell not performing segueSWRevealViewController 笔尖单元不执行 segue
【发布时间】:2016-02-22 05:49:18
【问题描述】:

简单地说,我的应用中有一个幻灯片导航视图控制器,带有一个后表 VC 和一个前表 VC。后表 VC 中的选定单元格应该与前表 VC(嵌入在导航 VC 中)相连接。为了说明,这里是独立的更改前设置和代码,它可以正常工作:

这是我的后台 VC 的 cellForRowAtIndexPath 方法中的简化工作代码:

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let navigationCell = tableView.dequeueReusableCellWithIdentifier("NavigationCell", forIndexPath: indexPath) as UITableViewCell
    return navigationCell
}

好的,进入有趣的部分。我想要的只是将上面显示的默认 UITableViewCell 替换为 Xib 文件中的一个自定义单元格。现在我将说明我修改的内容。首先,这是我的 NavigationCell.xib 文件中的 Xib 单元格。没什么特别的。

我的NavigationCell 课程代码很简单

import UIKit

class NavigationCell: UITableViewCell {
    @IBOutlet var nameLabel: UILabel!
}

最后,我修改了后表 VC 中的代码以注册 Xib 并将自定义单元格出列:

override func viewDidLoad() {
    super.viewDidLoad()
    let navigationCellNib = UINib(nibName: "NavigationCell", bundle: nil)
    tableView.registerNib(navigationCellNib, forCellReuseIdentifier: "NavigationCell")
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let navigationCell = tableView.dequeueReusableCellWithIdentifier("NavigationCell", forIndexPath: indexPath) as! NavigationCell
    return navigationCell
}

所有其他代码和规范保持不变。新自定义单元格的故事板转场仍然来自 SWRevealViewControllerSeguePushController 类,如该问题的第一个屏幕截图所示。我只是用我的自定义 Xib 单元替换了默认的 UITableViewCell。

这个修改足以阻止转场的发生。通过此修改,当我滑出后表 VC 导航菜单并选择我的自定义导航单元之一(正确显示)时构建并运行后,它不会触发任何 segue。有什么想法吗?

【问题讨论】:

  • 我以前用过 SWRevealController,这东西变得很棘手。您是否尝试过将 segue 设置为 setController 而不是 pushController?
  • 我来回切换也没有用。当我点击导航单元格时,它会以默认的浅灰色突出显示并触发 didSelectRowAtIndexPath 方法,但仅此而已。
  • 这是我第一次使用 SWRevealController appcoda.com/ios-programming-sidebar-navigation-menu 时使用的教程,您已经完成了大部分设置,请转到标题为实现菜单项选择的部分。看来您需要一个转场标识符并准备转场方法。还要确保你有正确的 sw_front、sw_rear segue 标识符。这是一个很好的教程。
  • 感谢@MatthewLawrenceBailey 的帮助,不幸的是我已经实现了所有这些东西。 sw_front、sw_rear 和 prepareForSegue。我将这些代码示例排除在这个问题之外,因为之前一切正常,我只展示了哪些更改使其无法正常工作。我的导航单元甚至没有触发 prepareForSegue 方法。
  • 从右上角的图片中可以看出,您没有为未调用的 segue 设置 segue 标识符。这可能会导致不触发 segue 的准备。将其设置为任何内容,例如。 'segueIdentifier',然后在 SWRevealViewController.m 的 prepareForSegue 中实现 if ([segue.identifier isEqualToString:@"segueIdentifier"]),它在教程中距离设置其他 segues 稍远

标签: ios swift uitableview uiviewcontroller swrevealviewcontroller


【解决方案1】:

我是个白痴。我必须在 didSelectRowAtIndexPath 中以编程方式执行 segue。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2014-11-23
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多