SWRevealViewController: what is the callback on frontViewController when self.revealViewController (). ShowToggleAnimated (true)

OptionViewController.swift: This is the slide menu

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
}

      

And I have FrontViewController as DetailsViewController.swift. When I select a different view option in the slide pane, I just show the ToggleAnimated (), which calls the FrontViewController.

Now I want to use this new set of views for the currentView variable in the DetailsViewController to change the screen

I want to know what callback is received by the DetailsViewController when fully shown so that I can use the new variable currentView.

FYI: None of these callbacks were received: viewWillAppear, viewDidAppear, viewDidLoad when showToggleAnimated () is called.

Solution: Registered for SWRevealViewControllerDelegate: didMoveToPosition and DSN: here are the final code snippets

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
}

      

+3


source to share


1 answer


If I understand your question correctly, I suggest submitting it NSNotification

yourself. I am assuming you are using tableView for your RearViewController.

In your RearViewController

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

      



In your 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
}

      

0


source







All Articles