gpt4 book ai didi

uiviewcontroller - 将 "quick actions"添加到我的 iOS 9 应用程序

转载 作者:行者123 更新时间:2023-12-04 07:23:38 29 4
gpt4 key购买 nike

我想将 iOS 9 的快速操作添加到我的应用程序中。

我将此代码放在我的应用程序委托(delegate)中:

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

现在我可以用力触摸我的应用程序图标 > 将显示快速操作 > 我选择快速操作“新扫描” > 应用程序将打开并显示我离开的最后一个 View 。

但是segue不会被执行。

这是我的 Storyboard的一部分:

enter image description here

解释:

A:导航 Controller 和初始化 Controller

B:ViewController,经过检查,这将转到导航 Controller C

C:导航 Controller

D: TableView Controller

E: View Controller

如果我选择带有快速操作的新扫描 - 我想显示 ViewController E。

最佳答案

根据 example code in the documentation,您似乎在做正确的事情。 .但是,您的 handleShortCutItem: 中有很多可选链接。执行。您是否使用调试器来验证这些表达式都没有 nil 值?此外,据我所见(尽管图像模糊),该 Storyboard中第一个导航 Controller 的 Root View Controller 没有与 E 的 segue。所以我不确定你打算如何到达那里。

我建议您在 handleShortCutItem: 中设置断点。实现首先验证您正在使用的值不是 nil并且代码实际上正在执行。完成此操作后,您可以使用 Storyboard 实例化您想要的 View 控件,然后创建一个数组,因为您希望 View Controller 层次结构位于导航 Controller 中,并设置导航 Controller 的 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
}

注意:由于您使用 Swift2 标记了此问题,因此我冒昧地调整代码以使用保护语句。

关于uiviewcontroller - 将 "quick actions"添加到我的 iOS 9 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32820581/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com