我有自定义键盘扩展程序。我需要知道我的键盘显示/隐藏的时间。 我读了this文章,这个块:
- (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
{
}
但是这段代码实现到应用程序中。 addObserver
参数self
表示它。那么,我怎样才能从我的主机应用程序中获取一个对象(可能是任何带有文本字段的应用程序)来传递注册通知?
或者,如果显示/隐藏键盘,还可以注册其他三个选项吗?
isfirstResponder也来自扩展 - 我认为不是一个选项。
答案 0 :(得分:0)
这对我来说可能为时已晚,但您无法从NSNotifications获取该信息,实际上我认为此代码无法正常工作,因为大多数NSNotifications都在沙箱中被禁用键盘扩展名。
例如,我尝试使用OnCopyClipboard通知,但这对我没用。你有没有跑步?我对这些结果非常感兴趣。
抱歉,我不得不说,这是因为沙盒的键盘扩展名是众所周知的。
答案 1 :(得分:0)
当我使用Extensions时遇到同样的问题,这也是同样的问题。我搜索了很多地方,发现我们可以从扩展程序发送到主应用程序,
您可以使用CFNotificationCenterGetDarwinNotifyCenter
来使用它以下是我撰写的与此https://medium.com/@saberjack/ios-sending-notifications-between-your-apps-3fe7422d6a41
相关的博客链接希望这有帮助
答案 2 :(得分:0)
您需要启用两个目标的应用组,以便能够在您的扩展程序和包含的应用之间共享NSUserDefaults,这是一个小指南:
YOUR_PROJECT_NAME_TARGET
,切换到顶部菜单中的功能,然后向下滚动到应用程序组。group.YOUR_COMPANY.YOUR_TARGET_NAME
YOUR_PROJECT_NAME_TARGET
替换为YOUR_EXTENSION_NAME_TARGET
),这次您将使用相同的已创建应用组,而不是像之前步骤中那样创建新的应用组和开发团队。返回代码: 8.在Container App中,选择要与扩展共享数据的视图控制器,并添加以下代码块:
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"YOUR_GROUP_NAME"];
[sharedDefaults setInteger:[self.textField.text integerValue] forKey:@"MyNumberKey"];
[sharedDefaults synchronize];
在分机视图控制器中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDefaultsDidChange:)
name:NSUserDefaultsDidChangeNotification object:nil];
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"YOUR_GROUP_NAME"];
NSInteger number = [defaults integerForKey:@"MyNumberKey"];
完成!