我想知道iOS 8中是否有新的API允许您在键盘扩展中播放标准的键盘点击声 - 只有在启用键盘点击并且设备未处于静音状态时才播放.我还没有见过这样的API,我也没有看到任何关于这个的问题.
我知道在以前的iOS版本中,如果您实现了自定义输入或键盘附件视图(通过[[UIDevice currentDevice] playInputClick];采用UIInputViewAudioFeedback协议并返回YES后enableInputClicksWhenVisible),这是可能的.这只有在那种情况下才有可能.键盘扩展名既不是那些.
是否可以使用自定义iOS键盘播放输入点击?
请注意,这个问题是相关的,但是他们想要一个自定义声音,并且该解决方案不会尊重用户播放键盘点击的偏好 - 即使禁用该选项也会始终播放它们.
我使用以下代码在共享容器路径下创建文件夹/文件.这将有助于应用扩展程序和包含应用程序的扩展程序可以访问数据.
获取共享容器url位置的代码:
+(NSURL*)getSharedContainerURLPath
{
NSFileManager *fm = [NSFileManager defaultManager];
NSString *appGroupName = APP_EXTENSION_GROUP_NAME; /* For example */
NSURL *groupContainerURL = [fm containerURLForSecurityApplicationGroupIdentifier:appGroupName];
return groupContainerURL;
}
Run Code Online (Sandbox Code Playgroud)
用于创建目录的代码
+(void)createDirAtSharedContainerPath
{
NSString *sharedContainerPathLocation = [[self getSharedContainerURLPath] absoluteString];
NSString *directoryToCreate = @"user_abc";
//basically this is <shared_container_file_path>/user_abc
NSString *dirPath = [sharedContainerPathLocation stringByAppendingPathComponent:directoryToCreate];
BOOL isdir;
NSError *error = nil;
NSFileManager *mgr = [[NSFileManager alloc]init];
if (![mgr fileExistsAtPath:dirPath isDirectory:&isdir]) { //create a dir only that does not exists
if (![mgr createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error]) {
NSLog(@"error while …Run Code Online (Sandbox Code Playgroud) 此问题完全基于有关在iOS中引入应用程序扩展的公开发布的文档.
随着iOS 8中的应用扩展程序的推出,现在可以"扩展您的应用程序之外的自定义功能和内容,并在用户使用其他应用程序时将其提供给用户".
在我的扩展实现中,我在我的扩展(模型等)中包含了我的实际应用程序中的一些类.问题是这些类进行调用UIApplication,这在app扩展中是不可用的,编译器告诉我.
我认为一个简单的解决方案就是UIApplication在#if指令中包含任何调用.
例如,如果我想在模拟器上运行时只包含代码,我会使用:
#if TARGET_IPHONE_SIMULATOR
// Code Here
#endif
Run Code Online (Sandbox Code Playgroud)
当目标是应用程序扩展时,是否有类似的定义宏?
我正在为iOS 8创建自定义键盘扩展.
我想获取用户在文本输入字段中编写的整个字符串.
不幸的是,我偶然发现了两个主要问题:
1)我在这个回调中得到null:
- (void)textDidChange:(id<UITextInput>)textInput
Run Code Online (Sandbox Code Playgroud)
2)当我调用这些方法时,我只得到部分字符串:
- [self.textDocumentProxy documentContextAfterInput];
- [self.textDocumentProxy documentContextBeforeInput];
Run Code Online (Sandbox Code Playgroud)
我想在用户正在编辑的文本输入中获取整个字符串,您建议我做什么?
谢谢!
我想启动我的包含应用程序.
我尝试使用URL方案.
URL方案从其他地方启动了应用程序 - 所以问题不存在.
看起来这个对象是零:
self.extensionContext
Run Code Online (Sandbox Code Playgroud)
因此我无法运行此方法:
[self.extensionContext openURL:url completionHandler:nil];
Run Code Online (Sandbox Code Playgroud)
我可以启动我的应用吗?URL方案是否可以在自定义键盘中使用?
谢谢!
如何在App Extension中获取设备当前方向,我尝试了以下两种方法但没有成功.
它总是返回UIDeviceOrientationUnknown
[[UIDevice currentDevice] orientation]
Run Code Online (Sandbox Code Playgroud)它显示红色消息,'sharedApplication'在iOS上不可用(App Extension)
[[UIApplication sharedApplication] statusBarOrientation];
Run Code Online (Sandbox Code Playgroud)我还添加了一个观察者,但它没有被调用.
[[NSNotificationCenter defaultCenter] addObserver:self.view selector:@selector(notification_OrientationWillChange:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil];
- (void)notification_OrientationWillChange:(NSNotification*)n
{
UIInterfaceOrientation orientation = (UIInterfaceOrientation)[[n.userInfo objectForKey:UIApplicationStatusBarOrientationUserInfoKey] intValue];
if (orientation == UIInterfaceOrientationLandscapeLeft)
[self.textDocumentProxy insertText:@"Left"];
if (orientation == UIInterfaceOrientationLandscapeRight)
[self.textDocumentProxy insertText:@"Right"];
}
Run Code Online (Sandbox Code Playgroud)那么现在如何才能获得当前的设备定位.
keyboard objective-c ios uideviceorientation ios-app-extension
EDIT2:
我把这个问题简化为最简单的项目.这是设置.

我创建了一个新的单一视图应用程序并立即添加了一个新的Action扩展目标.我在.xcassets文件中创建了一个新的图标集,并添加了一个iPad视网膜大小的图标(我已尝试填写所有图标,结果相同).

我确保在Copy Bundle Resources构建阶段包含Images.xcassets:

然后在模拟器中运行应用程序时一切正常!

然而,编译到设备会产生一个空白图标:

我想也许这意味着我正在使用的PNG文件有问题,但是这里的一切看起来还不错:

有没有人遇到类似的?
我已经访问过这样的问题该找一个答案,我认为我做的一切权利,但我仍然没有看到在动作片上的图标.
这就是我所做的:
创建了一个工作容器应用程序,其中包含存储在Images.xcassets中的工作应用程序图标.然后我创建了一个Action Extension Target作为同一个项目的成员.
将包含应用程序的Images.xcassets添加到我的扩展程序的"Copy Bundle Resources"构建阶段.我知道这很有效,因为我可以UIImage.imageNamed(...)在我的扩展程序中使用.xcassets文件加载图像.
在我的扩展设置的常规选项卡中,我指出"应用程序图标和启动图像"下的"应用程序图标源"指向Images.xcassets的名为"AppIcon"的资源,与我的包含应用程序使用的资源相同.
当这不起作用时,我做了一些进一步的阅读,发现Action Extensions需要一个"alpha mask"风格的图像.我在.xcassets文件中创建了另一个名为"AppIcon-2"的项目,并使用所有尺寸的应用程序图标填充它,除了作为单色+透明度PNG.我将我的扩展的"App Icons和Launch Images"指向这个新的"AppIcon-2"
我的动作扩展的图标仍然是一个空白的白色方块.有没有我缺少的步骤?alpha掩码必须有一些非常具体的格式吗?(我只是在photoshop中保存为.png).资源在.xcassets中是否有一些非常具体的名称?
我也对一些答案(如上面链接的答案)感到困惑,这些答案似乎意味着通过在构建阶段添加.xcassets来解决问题.大多数app图标都不完全不透明吗?iOS如何从完全不透明的应用程序图标生成alpha蒙版?
编辑:我不完全确定是什么改变产生了差异(如果我搞清楚的话,我会尝试推断它并更新这篇文章)但我现在看到一个基于"AppIcon-2"alpha掩码的工作图标"在模拟器上.我甚至没想过要检查模拟器,但确实证明图标是从正确的位置拉出来的.关于设备的一些事情是以不同的方式处理图像.
我正在开发iOS8的Today Extension.我的应用程序组设置正确,我可以成功使用NSUserDefaults将简单的数据位发送到我的扩展(使用本教程).
在我的扩展程序的故事板中,我已将图像放在故事板上,并将图像设置为我在资产目录中的资产.即使它出现在Interface Builder中,当我在设备和模拟器上运行应用程序时,图像也不会显示.
我错过了什么?
我试图删除故事板文件和相关Info.plist条目,但这次延期停止了工作; 它甚至没有从XCode启动.
The operation couldn’t be completed. (LaunchServicesError error 0.)
常规应用程序(包含应用程序)很容易,因为我们看到它的入口点和应用程序委托,但是如何在扩展程序上执行此操作?
我有一个简单的应用程序,它也有iOS 8今日扩展(或小部件).我正在做的一件事是在我的应用程序和我的小部件之间共享代码类,因为这显然使我不必拥有相同代码的多个副本.除了我遇到的一个问题之外,这一切都很UIApplication sharedApplication好用,其中一个API 会出现错误,因为你无法在iOS 8 Widgets上使用它.
所以我想到的是,有一个简单的if语句,用于检查最终目标是否是本机应用程序,或者如果它是iOS 8小部件,然后根据需要添加代码.那会有用吗?
这是我的代码:
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
{
CGSize ssz = sz;
sz = CGSizeMake(ssz.height, ssz.width);
}
Run Code Online (Sandbox Code Playgroud)
如何更改此代码,以便可以执行以下操作之一:
我希望我的问题有道理,感谢你的时间,丹.
ios ×9
ios8 ×8
keyboard ×2
objective-c ×2
audio ×1
iphone ×1
preprocessor ×1
target ×1
widget ×1