【发布时间】:2015-07-19 20:26:07
【问题描述】:
OptionViewController.swift:这是滑动菜单
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var option : OptionVO
option = viewOptions[indexPath.row]
var nav = UIStoryboard.navigationController(option.identifier)!
var detailController = nav.topViewController as DetailsViewController
detailController.currentView = option.name
self.revealViewController().revealToggleAnimated(true)
}
private extension UIStoryboard {
class func mainStoryboard() -> UIStoryboard { return UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) }
class func navigationController(identifier : NSString) -> UINavigationController? {
return mainStoryboard().instantiateViewControllerWithIdentifier(identifier) as? UINavigationController
}
我有一个 FrontViewController 作为 DetailsViewController.swift。 当我在滑动面板中选择不同的视图选项时,我只需执行revealToggleAnimated() 即可调出 FrontViewController。
现在我想在 DetailsViewController 中为 currentView 变量使用这个新视图集来更改屏幕
我想知道DetailsViewController在完全显示后收到了什么回调,这样我就可以使用新设置的currentView变量了。
仅供参考: 未收到以下回调:调用revealToggleAnimated() 时的viewWillAppear、viewDidAppear、viewDidLoad。
解决方案: 注册 SWRevealViewControllerDelegate:didMoveToPosition 和调度通知:这里是最终代码 sn-ps
OptionViewController.swift [RearViewController]
override func viewDidLoad()
{
self.revealViewController().delegate = self
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var option : OptionVO
option = viewOptions[indexPath.row]
currentView = option.name
self.revealViewController().revealToggleAnimated(true)//didMoveToPosition is called when reveal is finished
}
func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition)
{
var notification = NSNotificationCenter.defaultCenter()
if let myNextView: AnyObject = currentView {
let viewDict = ["view" : myNextView]
notification.postNotificationName("ShowFrontVC",
object: nil,
userInfo: viewDict)
}
}
DetailsViewController.swift [FrontViewController]
func frontVCShown(notification:NSNotification)
{
let userInfo:Dictionary<String,String!> = notification.userInfo as Dictionary<String,String!>
currentView = userInfo["view"]
//change the view for currentView
}
【问题讨论】:
-
那些不是系统方法。您应该在问题的主题中列出任何第三方框架,以便了解这些框架的人看到问题。不要让人们不得不去寻宝才能弄清楚你在说什么!
-
@Duncan C,在标签下提到过。还不够吗?
-
不。最好把它放在帖子的主题中。
-
说实话我什至没有看你的标签,所以我对你的问题感到很困惑
标签: ios objective-c swift swrevealviewcontroller