我对3D触摸有些问题。它工作得很好,除了第一次启动应用程序时。以下是我的AppDelegate中的代码:
func handleQuickAction(shortcutItem: UIApplicationShortcutItem) -> Bool {
var quickActionHandled = false
let type = shortcutItem.type.componentsSeparatedByString(".").last!
if let shortcutType = Shortcut(rawValue: type) {
switch shortcutType {
case .aboutMe:
NSNotificationCenter.defaultCenter().addObserver(RAIntroductionViewController(), selector: #selector(RAIntroductionViewController.aboutMeTap), name: "about", object: nil)
NSNotificationCenter.defaultCenter().postNotificationName("about", object: self)
quickActionHandled = true
case .education:
NSNotificationCenter.defaultCenter().addObserver(RAIntroductionViewController(), selector: #selector(RAIntroductionViewController.educationTap), name: "education", object: nil)
NSNotificationCenter.defaultCenter().postNotificationName("education", object: self)
quickActionHandled = true
case .projects:
NSNotificationCenter.defaultCenter().addObserver(RAIntroductionViewController(), selector: #selector(RAIntroductionViewController.projectsTap), name: "projects", object: nil)
NSNotificationCenter.defaultCenter().postNotificationName("projects", object: self)
quickActionHandled = true
case .why:
NSNotificationCenter.defaultCenter().addObserver(RAIntroductionViewController(), selector: #selector(RAIntroductionViewController.whyPressed(_:)), name: "why", object: nil)
NSNotificationCenter.defaultCenter().postNotificationName("why", object: self)
quickActionHandled = true
}
}
return quickActionHandled
}
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
completionHandler(handleQuickAction(shortcutItem))
}
下面是
viewDidLoad
方法中的代码: NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.aboutMeTap), name: "about", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.educationTap), name: "education", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.projectsTap), name: "projects", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.whyPressed(_:)), name: "why", object: nil)
这些观察者调用推动导航控制器的方法。
虽然一切都完美无瑕,但在应用程序首次启动时,导航控制器并没有被推到正确的页面。它只是转到根视图控制器。
最佳答案
首次启动应用程序时,不会调用application:performActionForShortcutItem shortcutItem:completionHandler:
。
相反,您应该在application:didFinishLaunchingWithOptions:
中处理这个问题。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let options = launchOptions,
let shortcutItem = options[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
// do the work here..
}
return true
}
希望这有帮助:)