SWRevealViewController:当 self.revealViewController().revealToggleAnimated(true) 时 frontViewController 上的回调是什么
SWRevealViewController: what is the callback on frontViewController when self.revealViewController().revealToggleAnimated(true)
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。
当我 select 滑动面板中的不同视图选项时,我只是执行 revealToggleAnimated() 以调出 FrontViewController。
现在我想在 DetailsViewController 中使用这个为 currentView 变量设置的新视图来更改屏幕
我想知道DetailsViewController在完全显示时收到了什么回调,以便我可以使用新设置的currentView变量。
仅供参考:
None 收到这些回调:调用 revealToggleAnimated() 时的 viewWillAppear、viewDidAppear、viewDidLoad。
解决方法:
注册 SWRevealViewControllerDelegate:didMoveToPosition 和发送通知:这是最终的代码片段
OptionViewController.swift [后视控制器]
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
}
如果我理解你的问题,我建议你自己发一个 NSNotification
。我假设您正在为 RearViewController 使用 tableView。
在您的 RearViewController 中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowFrontVC" object:nil userInfo:nil];
}
在您的 FrontViewController 中
- (void)viewDidLoad {
[super viewDidLoad];
// Add observer
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frontVCShown) name:@"ShowFrontVC" object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// Remove Observer
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)frontVCShown {
// Update your view controller
}
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。 当我 select 滑动面板中的不同视图选项时,我只是执行 revealToggleAnimated() 以调出 FrontViewController。
现在我想在 DetailsViewController 中使用这个为 currentView 变量设置的新视图来更改屏幕
我想知道DetailsViewController在完全显示时收到了什么回调,以便我可以使用新设置的currentView变量。
仅供参考: None 收到这些回调:调用 revealToggleAnimated() 时的 viewWillAppear、viewDidAppear、viewDidLoad。
解决方法: 注册 SWRevealViewControllerDelegate:didMoveToPosition 和发送通知:这是最终的代码片段
OptionViewController.swift [后视控制器]
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
}
如果我理解你的问题,我建议你自己发一个 NSNotification
。我假设您正在为 RearViewController 使用 tableView。
在您的 RearViewController 中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowFrontVC" object:nil userInfo:nil];
}
在您的 FrontViewController 中
- (void)viewDidLoad {
[super viewDidLoad];
// Add observer
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frontVCShown) name:@"ShowFrontVC" object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// Remove Observer
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)frontVCShown {
// Update your view controller
}