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

问题描述:

在我的自定义键盘(ios键盘扩展)中,有一个UIButton将打印字符串作为输入。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”从应用程序,其中该键盘改变了这个字符串值扩展类resides.Now按钮动作的变化:

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

它不会给任何输入并切换到按钮按下时的默认键盘。 我认为扩展类一旦启动应用程序就会执行,我在这里对有关键盘扩展的功能和生命周期有点困惑,我怎样才能从应用程序控制输入文本,任何帮助是最受欢迎的。

NSUserDefaults甚至文档目录不会帮助在应用程序和扩展之间共享数据。这是一个非常重要的小姐,应用程序组是这样的解决方案。

应用程序组是能够共享NSUserDefaults数据库。这也适用于附加应用程序(通知中心小部件,自定义键盘等)。 初始化您NSUserDefaults的对象这样的应用程序组中的所有应用程序,他们将共享数据库:

的Objective-C:

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

斯威夫特:

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

在心中的一切保持每个应用程序的[NSUserDefaults standardUserDefaults]数据库不会转移到此数据库中。 别忘了同步数据库:

[yourDefaults synchronize];