我的应用程序的条目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
。< / LI>
在我的AppDelegate.swift
文件中,我添加了初步的快速操作代码:
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
//3D touch features
}
我现在的问题是我不确定要为我的AppDelegate.swift
文件写什么代码。我看过的所有教程和本网站上的所有类似问题都涉及使用快速操作调用不同的ViewController
,而不是在同一个`ViewController上调用不同的函数。提前谢谢。
答案 0 :(得分:1)
由于iOS告诉您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()
}
如果未来某些点你改为拥有一个不同类型的视图控制器作为root,你也可以在将来证明这一点并在调试模式下运行时崩溃:
{{1}}