如果不是初始视图控制器,则向第一响应者发送操作不起作用
Posted
技术标签:
【中文标题】如果不是初始视图控制器,则向第一响应者发送操作不起作用【英文标题】:Send action to first responder doesn't work if it's not Initial View Controller 【发布时间】:2015-06-12 02:06:24 【问题描述】:我正在尝试在这里创建类似于 SpringApp 中的代码菜单的滑动菜单(参见 CodeViewController):
https://github.com/MengTo/Spring/blob/master/SpringApp
只要 SpringViewController 是初始视图控制器,它就可以正常工作。
如果我创建另一个 ViewController 并将其设为初始值,则永远不会调用最小化视图/最大化视图:
UIApplication.sharedApplication().sendAction("minimizeView:", to: nil, from: self, forEvent: nil)
在此方法中,“to:”设置为 nil 以使用第一响应者。所以看起来当 SpringViewController 不再是初始视图控制器时,它不再是第一响应者。
如何修复它以使 SpringViewController 中定义的 minimizeView 和 minimizeView 操作始终有效?
【问题讨论】:
【参考方案1】:我找到了使用通知中心的解决方法。
在 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...
这使得最大化视图和最小化视图正常工作。我想知道第一响应者的方法是否更好。
【讨论】:
以上是关于如果不是初始视图控制器,则向第一响应者发送操作不起作用的主要内容,如果未能解决你的问题,请参考以下文章