- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,提前致谢。
我有一个我编写的应用程序,它使用 3D 触摸在主屏幕上使用新的 UIApplicationShortcut。一旦应用程序成为应用程序,快捷方式就可以使用,但如果应用程序被关闭,快捷方式就无法在主屏幕上使用。
当应用程序关闭时,快捷方式会启动应用程序,但快捷方式不起作用,只会启动应用程序。
这是我用于快捷方式的两种方法。
- (void)setupViewControllers {
// setup the navigation stack
CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;
if (iOSDeviceScreenSize.height == 480)
{
_navigationController = (UINavigationController *)self.window.rootViewController;
// iPhone 5 and iPod Touch 5th generation: 4 inch screen
// Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"Main4s" bundle:nil];
UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewController;
self.myViewController = (ViewController *)_navigationController.topViewController;
self.myViewController.managedObjectContext = self.managedObjectContext;
[self.window makeKeyAndVisible];
}
if (iOSDeviceScreenSize.height == 568)
{
_navigationController = (UINavigationController *)self.window.rootViewController;
// iPhone 5 and iPod Touch 5th generation: 4 inch screen
// Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initialViewController;
self.myViewController = (ViewController *)_navigationController.topViewController;
self.myViewController.managedObjectContext = self.managedObjectContext;
[self.window makeKeyAndVisible];
}
if (self.myViewController){NSLog(@"myViewController is not nil, setupViewControllers");}
else
{
NSLog(@"myViewController is nil, setupViewControllers");//breakpoint inserted here...
}
}
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
[self setupViewControllers];
// react to shortcut item selections
NSLog(@"A shortcut item was pressed. It was %@.", shortcutItem.localizedTitle);
if([shortcutItem.localizedTitle isEqualToString:@"Scan Tag"])
{
[self.myViewController toggleScanningTapped:nil];
}
if([shortcutItem.localizedTitle isEqualToString:@"Enter Tag"])
{
[self.myViewController manualEntry];
}
if([shortcutItem.localizedTitle isEqualToString:@"Search for a Tag"]){
[self.myViewController SearchSwitch];
[self.myViewController toggleScanningTapped:nil];
}
if([shortcutItem.localizedTitle isEqualToString:@"Just Scan & Copy"]){
[self.myViewController justCopy];
}
if (self.myViewController){NSLog(@"myViewController is not nil, performActionForShortcutItem");}
else
{
NSLog(@"myViewController is nil, performActionForShortcutItem");
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[self setupViewControllers];
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if (url != nil && [url isFileURL]) {
[self.myViewController handleOpenURL:url];
}
if (self.myViewController){NSLog(@"myViewController is not nil, didFinishLaunchingWithOptions");}
else{NSLog(@"myViewController is nil, didFinishLaunchingWithOptions");}
return YES;
}
这里是 plist 条目...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.PALIANTech.SUNYScanner.static1</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Scan Tag</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>Add tag to DB</string>
<key>UIApplicationShortcutItemIconFile</key>
<string>barcode.png</string>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.PALIANTech.SUNYScanner.static2</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Enter Tag</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>Manually add tag to DB</string>
<key>UIApplicationShortcutItemIconFile</key>
<string>ManualEntry.png</string>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.PALIANTech.SUNYScanner.static3</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Search for a Tag</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>Scan a tag to search for</string>
<key>UIApplicationShortcutItemIconFile</key>
<string>search.png</string>
</dict>
</array>
</plist>
如有任何帮助或建议,我们将不胜感激。
最佳答案
原因是当您的应用程序刚启动时 self.myViewController
在您检查 performActionForShortcutItem
中的快捷方式项时仍然是 nil
> 和 didFinishLaunchingWithOptions
。所以什么也没有发生。
要解决此问题,您必须实例化 myViewController
并在通过快捷方式打开应用程序时将其添加到导航堆栈。
编辑
这是一个有效的(精简版)版本:
AppDelegate
@interface AppDelegate ()
@property ViewController *viewController;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self setupViewControllers];
return YES;
}
- (void)setupViewControllers {
self.viewController = [[ViewController alloc] init];
self.viewController.view.backgroundColor = [UIColor lightGrayColor];
self.viewController.label.text = @"Normal Launch";
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
}
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
[self setupViewControllers];
if([shortcutItem.localizedTitle isEqualToString:@"Scan Tag"]) {
self.viewController.label.text = @"Shortcut: Scan Tag";
}
if([shortcutItem.localizedTitle isEqualToString:@"Enter Tag"]) {
self.viewController.label.text = @"Shortcut: Enter Tag";
}
if([shortcutItem.localizedTitle isEqualToString:@"Search for a Tag"]) {
self.viewController.label.text = @"Shortcut: Search Tag";
}
if([shortcutItem.localizedTitle isEqualToString:@"Just Scan & Copy"]) {
self.viewController.label.text = @"Shortcut: Scan & Copy Tag";
}
}
@end
ViewController
类是一个普通的 UIViewController
子类,它只有一个用于演示目的的标签。
我已经使用后台应用程序测试了快捷方式,并且该应用程序已从内存中完全删除。两者都按预期工作。
更新
如果您使用 Storyboard中的 ViewController,则必须像这样初始化它:
- (void)setupViewControllers {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.viewController = (ViewController *)[storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
...
}
不要忘记在 Storyboard中设置 ViewController 的标识符:
关于ios - 应用程序关闭时 3D Touch UIapplicationShortcut 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33102912/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!