ios中自定义键盘扩展上的UIButton的动态文本输入

时间:2016-02-05 12:53:32

标签: ios objective-c ios8 uibutton ios-keyboard-extension

在我的自定义键盘(ios键盘扩展名)中,有一个UIButton可以打印一个字符串作为输入。

     UIButton *nameButton=[UIButton buttonWithType:UIButtonTypeCustom];
     nameButton.frame=CGRectMake(0, 0, buttonWidth, buttonHeight);
     nameButton.center=CGPointMake(buttonWidth+buttonWidth/2,buttonHeight/2);
     [nameButton setTitle:@"Name" forState:UIControlStateNormal];
     [nameButton addTarget:self action:@selector(buttonsAction:) forControlEvents:UIControlEventTouchUpInside];
     [topRow addSubview:nameButton];

    -(void)buttonsAction :(UIButton*)sender
    {
       NSString *bName=sender.titleLabel.text;
      [self.textDocumentProxy insertText:bName];
    }

这很好用并打印"名称"这是按钮的标题。

在键盘扩展程序应用程序中,在另一个类中,用户选择名称,然后将其保存在NSUserDefaults中:

[[NSUserDefaults standardUserDefaults] setObject:selectedName forKey:@"Name"];

我想打印这个字符串值" selectedName"从此键盘扩展类所在的应用程序更改。现在按钮操作的更改:

    -(void)buttonsAction :(UIButton*)sender
    {
       NSString *bName=sender.titleLabel.text;
       NSUserDefaults *def=[NSUserDefaults standardUserDefaults];
       NSString *printValue=[def valueForKey:bName];
      [self.textDocumentProxy insertText:printValue];
    }

按钮按下时,它不会提供任何输入并切换到默认键盘。 我认为扩展类在应用程序启动后执行,我对这里关于键盘扩展的功能和生命周期感到困惑,如何从应用程序控制输入文本,欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

NSUserDefaults甚至文档目录都无法帮助在App和Extension之间共享数据。这是一个至关重要的错过,App Groups就是解决方案。

App Groups可以共享NSUserDefaults数据库。这也适用于App Extensions(通知中心小部件,自定义键盘等)。 在应用程序组的所有应用程序中初始化您的NSUserDefaults对象,它们将共享数据库:

目标-C:

    [[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];

夫特:

    NSUserDefaults(suiteName: "<group identifier>");

请记住,每个应用程序的[NSUserDefaults standardUserDefaults]数据库中的所有内容都不会延续到此数据库中。 并且不要忘记同步数据库:

    [yourDefaults synchronize];