如何在iOS自定义键盘中添加自定义通知?

4

我已经在我的应用中添加了自定义键盘扩展,并且运行得很好。

我在我的键盘扩展类中添加了NSNotification,如下所示:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeKeyboardColor) name:@"keyboard_color"  object:nil];

现在,我正在从我的视图控制器类中调用此通知,代码如下:
[[NSNotificationCenter defaultCenter] postNotificationName:@"keyboard_color" object:self];

现在我已经在我的键盘扩展类中添加了通知选择器方法,如下所示:
-(void)changeKeyboardColor{
}

但是它没有起作用。我在模拟器中测试,不知道如何在模拟器中测试键盘扩展。

谢谢。


你可以使用NSUserDefaults在应用程序和扩展之间传递值。 - kb920
2个回答

2
developer.apple.com创建应用组。

enter image description here

组名必须像 group.XXXXX。
如果应用程序 ID 和扩展应用程序 ID 都已禁用,则启用应用程序组。

enter image description here

如果现有的配置文件看起来无效,请更新它们!前往目标并提及您创建的组名称。

enter image description here

前往键盘扩展并提及相同的组名称。

enter image description here

现在您完成了所有必需的设置。
在您的项目中,将值存储在NSUserDefaults中。
 let userd: NSUserDefaults = NSUserDefaults(suiteName: "group.XXXXX")!
 userd.setObject("test11", forKey: "key")
 userd.synchronize()

//目标-C

NSUserDefaults *userd = [[NSUserDefaults alloc]initWithSuiteName:@"group.XXXXX"];
[userd setObject:@"test11" forKey:@"key"];//set the object you want to share
[userd synchronize];

在扩展类中检索NSUserDefaults值
 let userd: NSUserDefaults = NSUserDefaults(suiteName: "group.XXXXX")!
 print(userd.objectForKey("key"))

// Objective-C

NSUserDefaults *userd = [[NSUserDefaults alloc]initWithSuiteName:@"group.XXXXX"];
NSLog(@"%@",[userd objectForKey:@"key"]);

愉快的编码!


你使用的是Swift还是Objective-C? - kb920
应该可以工作。设置中缺少一些东西。对我来说它可以工作! - kb920
我正在使用7.0版本。 - Nirav
但我认为这不是因为Xcode版本的原因。再次检查所有设置。 - kb920
我已经检查了多次,但还是不起作用。设置没有问题。我认为问题在于如何在模拟器中运行扩展程序。 - Nirav
显示剩余2条评论

0

通知方法应该只接受一个参数,即触发通知本身:

-(void)changeKeyboardColorNotice: (NSNotification *) theNotice
{
  NSLog(@"In %s", __PRETTY_FUNCTION__);
}

你需要在选择器后面加上冒号:

[[NSNotificationCenter defaultCenter] addObserver:self
  selector: @selector(changeKeyboardColorNotice:) 
  name: @"keyboard_color"  
  object: nil];

我们可以在iOS模拟器中测试吗? - Nirav
我按照你所说的修改了代码,但是我无法在模拟器中测试。如果我运行键盘扩展,则能够运行项目,但如果我运行项目,则无法运行键盘扩展。 - Nirav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接