Gho*_*108 8 uiviewcontroller ios9 swift2
我想将iOS 9的快速操作添加到我的应用程序中.
我把这段代码放在我的app委托中:
import UIKit
enum ShortcutType: String {
case NewScan = "QuickAction.NewScan"
case Settings = "QuickAction.Settings"
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
static let applicationShortcutUserInfoIconKey = "applicationShortcutUserInfoIconKey"
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UIViewController.prepareInterstitialAds()
if(UIApplication.instancesRespondToSelector(Selector("registerUserNotificationSettings:"))) {
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))
}
// QUICK ACTIONS
var launchedFromShortCut = false
if #available(iOS 9.0, *) {
if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
launchedFromShortCut = true
handleShortCutItem(shortcutItem)
}
} else {
return true
}
return !launchedFromShortCut
}
/**************** QUICK ACTIONS ****************/
@available(iOS 9.0, *)
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: Bool -> Void) {
let handledShortCutItem = handleShortCutItem(shortcutItem)
completionHandler(handledShortCutItem)
}
@available(iOS 9.0, *)
func handleShortCutItem(shortcutItem: UIApplicationShortcutItem) -> Bool {
var handled = false
if let shortcutType = ShortcutType.init(rawValue: shortcutItem.type) {
let rootNavigationViewController = window!.rootViewController as? UINavigationController
let rootViewController = rootNavigationViewController?.viewControllers.first as UIViewController?
rootNavigationViewController?.popToRootViewControllerAnimated(false)
switch shortcutType {
case .NewScan:
rootViewController?.performSegueWithIdentifier("goToCamera", sender: nil)
handled = true
case.Settings:
rootViewController?.performSegueWithIdentifier("goToSettings", sender: nil)
handled = true
}
}
return handled
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以强行触摸我的应用程序图标>将显示快速操作>我选择快速操作"新扫描">应用程序将打开并显示我已离开的最后一个视图.
但是segue不会被执行.
这是我的故事板的一部分:
说明:
答:导航控制器和初始控制器
B:ViewController,经过检查后,这将成为导航控制器C的一个segue
C:导航控制器
D:表视图控制器
E:ViewController
如果我选择快速操作的新扫描 - 我想显示ViewController E.
根据文档中的示例代码,您似乎正在正确地执行操作.但是,您的实现中有很多可选的链接handleShortCutItem:.您是否使用调试器来验证这些表达式都没有nil值?此外,从我所看到的(虽然图像模糊),该故事板中的第一个导航控制器的根视图控制器没有到E的segue.所以我不确定你打算如何到达那里.
我建议你在handleShortCutItem:实现中设置一个断点,首先验证你正在使用的值是不是nil,代码实际上是在执行.完成此操作后,您可以使用故事板来实例化所需的视图控件,只需创建一个数组就可以将视图控制器层次结构放在导航控制器中,并将导航控制器的viewControllers属性设置为此数组.同样,很难准确地说出你想要的图像,但也许是这样的:
func handleShortCutItem(shortcutItem: UIApplicationShortcutItem) -> Bool {
guard let shortcutType = ShortcutType.init(rawValue: shortcutItem.type) else {
return false
}
guard let rootNavigationController = window?.rootViewController as? UINavigationController else {
return false
}
guard let rootViewController = rootNavigationController?.viewControllers.first else {
return false
}
guard let storyboard = rootNavigationController.storyboard else {
return false
}
var viewControllers = [rootViewController]
switch shortcutType {
case .NewScan:
// Instantiate the necessary view controllers for this case
viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some view controller#>")]
...
viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some other view controller#>")]
case.Settings:
// Instantiate the necessary view controllers for this case
viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some view controller#>")]
...
viewControllers += [storyboard.instantiateViewControllerWithIdentifier("<#Identifier for some other view controller#>")]
}
// Set the new view controllers array
rootNavigationController.setViewControllers(viewControllers, animated: false)
return true
}
Run Code Online (Sandbox Code Playgroud)
注意:由于您使用Swift2标记了此问题,因此我冒昧地调整代码以使用保护语句.
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |