gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:15:37 24 4
gpt4 key购买 nike

在我的自定义键盘(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];
}

这工作正常并打印“名称”,这是按钮的标题。

在键盘扩展 app 中,在另一个类中,用户选择名称并将其保存在 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];
}

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

最佳答案

NSUserDefaults 甚至 Documents Directory 都无助于在 App 和 Extension 之间共享数据。这是一个关键的失误,App Groups 是解决方案。

App Groups 是共享 NSUserDefaults 数据库的能力。这也适用于应用程序扩展(通知中心小部件、自定义键盘等)。
在 app 组中的所有应用程序中像这样初始化你的 NSUserDefaults 对象,它们将共享数据库:

objective-C :

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

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

请记住,每个应用程序的 [NSUserDefaults standardUserDefaults] 数据库中的所有内容都不会转移到该数据库中。
并且不要忘记同步数据库:
    [yourDefaults synchronize];

关于ios - 从 ios 自定义键盘扩展上的 UIButton 动态文本输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35224780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com