【问题标题】:SWRevealViewController: what is the callback on frontViewController when self.revealViewController().revealToggleAnimated(true)SWRevealViewController: self.revealViewController().revealToggleAnimated(true) 时 frontViewController 上的回调是什么
【发布时间】: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


【解决方案1】:

如果我对您的问题的理解正确,我建议您自己发送NSNotification。我将假设您将 tableView 用于您的 RearViewController。

在您的 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
}

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 2015-12-12
    • 2015-03-19
    • 2016-02-04
    • 1970-01-01
    • 2017-12-16
    • 2014-06-06
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多