【发布时间】: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