3D Touch Quick Action For Same ViewController
3D Touch Quick Action For Same ViewController
我的应用程序的条目 ViewController
包含两个按钮:weight
和 age
。在主 ViewController
中,这是单击 weight
按钮时运行的代码:
@IBAction func weightSearch(_ sender: Any) {
//Weight button clicked
inputReset()
userInput.keyboardType = UIKeyboardType.numberPad
userInput.becomeFirstResponder()
}
这是单击 age
按钮时运行的代码:
@IBAction func ageSearch(_ sender: Any) {
//Age button clicked
inputReset()
userInput.inputView = agePicker
userInput.becomeFirstResponder()
}
我想做的是实现两个 3D Touch 快速操作,一个称为 Weight Search
(它运行 func weightSearch
的代码),另一个称为 Age Search
(它运行 func ageSearch
的代码)。这是我到目前为止所做的:
- 在
Info.plist
文件中,我创建了一个 UIApplicationShortcutItems
数组,其中有两个 Items
类型的字典,以及它们各自的 UIApplicationShortcutItemTitle
和 UIApplicationShortcutItemType
.
在我的AppDelegate.swift
文件中,我添加了初步的快速操作代码:
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
//3D touch features
}
我现在的问题是我不确定要为我的 AppDelegate.swift
文件编写什么代码。我看过的所有教程和本网站上的所有类似问题都涉及使用快速操作调用不同的 ViewController
,而不是在同一个 ViewController 上调用不同的函数。提前谢谢你。
因为 iOS 告诉你的 AppDelegate
用户选择了一个快速操作,你可以自由地用它做你想做的事。要获得对您的 ViewController
的引用,您只需向 window
询问 rootViewController
(这将是您的 ViewController
)。然后你就可以自由地做你需要做的事了。
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
guard let viewController = window?.rootViewController as? ViewController else { return }
viewController.performSomeAction()
}
你也可以在未来证明这一点并在 运行 在调试模式下崩溃,如果在未来的某个时候你更改为具有不同类型的视图控制器作为根:
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
guard let viewController = window?.rootViewController as? ViewController else {
assertionFailure("Wrong view controller type!") // This only crashes in debug mode
return
}
viewController.performSomeAction()
}
我的应用程序的条目 ViewController
包含两个按钮:weight
和 age
。在主 ViewController
中,这是单击 weight
按钮时运行的代码:
@IBAction func weightSearch(_ sender: Any) {
//Weight button clicked
inputReset()
userInput.keyboardType = UIKeyboardType.numberPad
userInput.becomeFirstResponder()
}
这是单击 age
按钮时运行的代码:
@IBAction func ageSearch(_ sender: Any) {
//Age button clicked
inputReset()
userInput.inputView = agePicker
userInput.becomeFirstResponder()
}
我想做的是实现两个 3D Touch 快速操作,一个称为 Weight Search
(它运行 func weightSearch
的代码),另一个称为 Age Search
(它运行 func ageSearch
的代码)。这是我到目前为止所做的:
- 在
Info.plist
文件中,我创建了一个UIApplicationShortcutItems
数组,其中有两个Items
类型的字典,以及它们各自的UIApplicationShortcutItemTitle
和UIApplicationShortcutItemType
. 在我的
AppDelegate.swift
文件中,我添加了初步的快速操作代码:func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) { //3D touch features }
我现在的问题是我不确定要为我的 AppDelegate.swift
文件编写什么代码。我看过的所有教程和本网站上的所有类似问题都涉及使用快速操作调用不同的 ViewController
,而不是在同一个 ViewController 上调用不同的函数。提前谢谢你。
因为 iOS 告诉你的 AppDelegate
用户选择了一个快速操作,你可以自由地用它做你想做的事。要获得对您的 ViewController
的引用,您只需向 window
询问 rootViewController
(这将是您的 ViewController
)。然后你就可以自由地做你需要做的事了。
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
guard let viewController = window?.rootViewController as? ViewController else { return }
viewController.performSomeAction()
}
你也可以在未来证明这一点并在 运行 在调试模式下崩溃,如果在未来的某个时候你更改为具有不同类型的视图控制器作为根:
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
guard let viewController = window?.rootViewController as? ViewController else {
assertionFailure("Wrong view controller type!") // This only crashes in debug mode
return
}
viewController.performSomeAction()
}