SWRevealViewController:当self.revealViewController()。revealToggleAnimated(true)时,frontViewController上的回调是什么

时间:2015-05-08 20:02:54

标签: ios objective-c swift swrevealviewcontroller

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中使用这个新的视图集来更改屏幕

我想知道DetailsViewController在完全显示时收到了什么回调,以便我可以使用新设置的currentView变量。

供参考: 这些回调都没有收到:viewWillAppear,viewDidAppear,在调用revealToggleAnimated()时的viewDidLoad。

解决方案: 注册SWRevealViewControllerDelegate:didMoveToPosition和调度通知:这是最终的代码片段

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
}

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,我建议你自己发送@fontAwesomeEotPath: asset-url("fontawesome-webfont.eot"); @fontAwesomeEotPath_iefix: asset-url("fontawesome-webfont.eot#iefix"); @fontAwesomeWoffPath: asset-url("fontawesome-webfont.woff"); @fontAwesomeTtfPath: asset-url("fontawesome-webfont.ttf"); @fontAwesomeSvgPath: asset-url("fontawesome-webfont.svg#fontawesomeregular"); // Font Awesome @import "fontawesome/font-awesome"; 。我将假设你正在使用tableView作为你的RearViewController。

在你的RearViewController中

NSNotification

在你的FrontViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ShowFrontVC" object:nil userInfo:nil];
}