ios - 如果不是初始 View Controller ,则将操作发送到第一响应者将不起作用

标签 ios swift

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

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

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

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

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

在此方法中,“to:”设置为 nil 以使用第一响应者。所以看起来当 SpringViewController 不再是初始 View Controller 时,它就不再是第一响应者。

如何修复它以使SpringViewController中定义的minimizeView和maximizeView操作始终有效?

最佳答案

我找到了使用通知中心的解决方法。

在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...
}

这使得最大化 View 和最小化 View 正常工作。我想知道第一响应者的方法是否更好。

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

相关文章:

swift - 测量 - 获取完整的单位名称

swift - ProgressBar 在 ViewController 中不移动

ios - 修改 MPMoviePlayerViewController 上允许的方向(从 UIWebView 调用)。 iOS 5 和 iOS 6

ios - 在多个ios设备之间共享应用程序订阅中的非续订

objective-c - Objective-C 工厂方法如何转换为 Swift 便捷初始化器?

swift - 如何比较结构数组以查看哪些元素不同?

ios - 如何判断用户是否位于特定位置?

android - App Store 或 Google Play 应用程序的加密和导出许可证

ios - Firebase 无法在 iOS 上运行

ios - 获取 Xcode 构建时间