ios 中自定义键盘扩展上 UIButton 的动态文本输入
Dynamic Text Input from a UIButton on Custom Keyboard Extension in ios
在我的自定义键盘(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];
}
这工作正常并打印 "Name" 这是按钮的标题。
在键盘扩展应用程序中,在另一个 class 用户中选择名称,我将其保存在 NSUserDefaults 中为:
[[NSUserDefaults standardUserDefaults] setObject:selectedName forKey:@"Name"];
我想打印这个 "selectedName" 的字符串值,它从这个键盘扩展 class resides.Now 按钮操作的变化的应用程序中改变:
-(void)buttonsAction :(UIButton*)sender
{
NSString *bName=sender.titleLabel.text;
NSUserDefaults *def=[NSUserDefaults standardUserDefaults];
NSString *printValue=[def valueForKey:bName];
[self.textDocumentProxy insertText:printValue];
}
它不提供任何输入并在按下按钮时切换到默认键盘。
我认为扩展 class 在应用程序启动后执行,我对键盘扩展的功能和生命周期有点困惑,我如何控制应用程序的输入文本,欢迎任何帮助。
NSUserDefaults 甚至 Documents Directory 都无助于在 App 之间共享数据,Extension.It 是一个非常重要的错误,App Groups 是解决这个问题的方法。
App Groups 是共享 NSUserDefaults 数据库的能力。这也适用于应用程序扩展(通知中心小部件、自定义键盘等)。
在应用组中的所有应用程序中像这样初始化您的 NSUserDefaults 对象,它们将共享数据库:
Objective-C:
[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];
Swift:
NSUserDefaults(suiteName: "<group identifier>");
请记住,每个应用程序的 [NSUserDefaults standardUserDefaults] 数据库中的所有内容都不会转移到此数据库中。
并且不要忘记同步数据库:
[yourDefaults synchronize];
在我的自定义键盘(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];
}
这工作正常并打印 "Name" 这是按钮的标题。
在键盘扩展应用程序中,在另一个 class 用户中选择名称,我将其保存在 NSUserDefaults 中为:
[[NSUserDefaults standardUserDefaults] setObject:selectedName forKey:@"Name"];
我想打印这个 "selectedName" 的字符串值,它从这个键盘扩展 class resides.Now 按钮操作的变化的应用程序中改变:
-(void)buttonsAction :(UIButton*)sender
{
NSString *bName=sender.titleLabel.text;
NSUserDefaults *def=[NSUserDefaults standardUserDefaults];
NSString *printValue=[def valueForKey:bName];
[self.textDocumentProxy insertText:printValue];
}
它不提供任何输入并在按下按钮时切换到默认键盘。 我认为扩展 class 在应用程序启动后执行,我对键盘扩展的功能和生命周期有点困惑,我如何控制应用程序的输入文本,欢迎任何帮助。
NSUserDefaults 甚至 Documents Directory 都无助于在 App 之间共享数据,Extension.It 是一个非常重要的错误,App Groups 是解决这个问题的方法。
App Groups 是共享 NSUserDefaults 数据库的能力。这也适用于应用程序扩展(通知中心小部件、自定义键盘等)。 在应用组中的所有应用程序中像这样初始化您的 NSUserDefaults 对象,它们将共享数据库:
Objective-C:
[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];
Swift:
NSUserDefaults(suiteName: "<group identifier>");
请记住,每个应用程序的 [NSUserDefaults standardUserDefaults] 数据库中的所有内容都不会转移到此数据库中。 并且不要忘记同步数据库:
[yourDefaults synchronize];