我正在尝试在此处创建类似于SpringApp中的代码菜单的滑动菜单(请参见CodeViewController):

https://github.com/MengTo/Spring/blob/master/SpringApp

只要SpringViewController是Initial View Controller,它就可以正常工作。

如果我创建另一个ViewController并将其设置为初始,则将不会调用minimumView / maximizeView:

UIApplication.sharedApplication().sendAction("minimizeView:", to: nil, from: self, forEvent: nil)


在此方法中,将“ to:”设置为nil以使用第一响应者。因此,当SpringViewController不再是初始视图控制器时,它不再是第一响应者。

如何解决它,以使SpringViewController中定义的minimumView和maximumView动作始终起作用?

最佳答案

我发现了使用通知中心的解决方法。

在SpringViewController中添加:

override func viewDidLoad() {
  super.viewDidLoad()

  // Add observer in notification center
  // It receives notifications from menu
  NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: "minimizeView:",
    name: "minimizeView",
    object: nil)
  NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: "maximizeView:",
    name: "maximizeView",
    object: nil)
  }


在OptionsViewController中:

  override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)
    // skipped ...
    // Post notification
    NSNotificationCenter.defaultCenter().postNotificationName("minimizeView", object: nil)
  }

@IBAction func closeButtonPressed(sender: AnyObject) {
    // skipped...
    // Post notification
    NSNotificationCenter.defaultCenter().postNotificationName("maximizeView", object: nil)
    // skipped...
}


这使得maximateView和minimumView可以正常工作。我想知道第一响应者的方法是否更好。

关于ios - 如果不是初始View Controller,则无法将操作发送给第一响应者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30794303/

10-10 11:13