0

我有一个自定义键盘扩展。我需要知道我的键盘何时显示/隐藏。我读了这篇文章,这个块:

- (void)registerForKeyboardNotifications
{

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardWillShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];

}

// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{

}

// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{


}

但是这段代码实现到 app.js 中。addObserver论据是这个self意思。那么,我怎样才能从我的主机应用程序(它可以是任何带有文本字段的应用程序)中获取一个对象来传递注册通知?

或者如果显示/隐藏键盘,是否还有其他三个注册选项?

isfirstResponder 也来自扩展 - 我想不是一个选项。

4

3 回答 3

0

这对我来说可能回答得太晚了,但是您无法从 NSNotifications 获取该信息,实际上我猜此代码将永远无法工作,因为大多数 NSNotifications 在键盘扩展的沙箱内都被禁用。

例如,我尝试使用 OnCopyClipboard 通知,但这对我没有用。你有这个运行吗?我对这些结果很感兴趣。

抱歉,我不得不说不,这是因为键盘扩展以沙盒而闻名。

于 2014-12-22T19:49:49.757 回答
0

这是我在使用扩展程序时遇到的同样问题。我搜索了很多地方,发现我们可以从扩展程序发送到主应用程序,

您可以使用 CFNotificationCenterGetDarwinNotifyCenter

这是我写的与此相关的博客链接https://medium.com/@saberjack/ios-sending-notifications-between-your-apps-3fe7422d6a41

希望这可以帮助

于 2015-04-02T18:28:48.893 回答
0

您需要为两个目标启用 App Groups 才能在您的扩展程序和包含的应用程序之间共享 NSUserDefaults,这是一个小指南:

  1. 在 Project Navigator 中,单击左上角的小箭头以显示目标列表。
  2. 单击YOUR_PROJECT_NAME_TARGET,切换到顶部菜单中的功能,然后向下滚动到应用程序组。
  3. 打开应用组开关。
  4. 选择要用于配置的开发团队并单击选择(这会将“应用程序组”权利添加到您的应用程序 ID)。
  5. 单击 + 添加新的应用程序组并调用它group.YOUR_COMPANY.YOUR_TARGET_NAME
  6. Xcode 现在将为您的 App ID 添加“App Groups 容器”权利。如果一切正常,新的 App 组应该在那里并且应该被检查。 在此处输入图像描述
  7. 现在您需要对 Extension 目标重复这些步骤。(替换YOUR_PROJECT_NAME_TARGETYOUR_EXTENSION_NAME_TARGET),这次您将使用相同的已创建应用组,而不是创建新的应用组和与前面步骤相同的开发团队。

返回代码: 8. 在您的 Container App 中,选择要与扩展共享数据的视图控制器并添加此代码块:

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"YOUR_GROUP_NAME"];
[sharedDefaults setInteger:[self.textField.text integerValue] forKey:@"MyNumberKey"];
[sharedDefaults synchronize];
  1. 在这里,我们只是用我们的 App Group 分配/初始化新的 NSUserDefaults,并将输入的数字存储在 MyNumberKey 下的 textField 中。

在扩展视图控制器中:

  1. 在初始化方法中,添加此代码块[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDefaultsDidChange:) name:NSUserDefaultsDidChangeNotification object:nil];
  2. 当您想访问您的共享数据时:NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"YOUR_GROUP_NAME"]; NSInteger number = [defaults integerForKey:@"MyNumberKey"];

完毕 !

于 2015-06-06T17:10:53.997 回答