【问题标题】:Dynamic Text Input from a UIButton on Custom Keyboard Extension in iosios中自定义键盘扩展上的UIButton的动态文本输入
【发布时间】:2016-02-05 12:53:32
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    NSUserDefaults 甚至 Documents Directory 都无助于在 App 和 Extension 之间共享数据。这是一个非常重要的失误,App Groups 就是解决这个问题的方法。

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

    目标-C:

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

    斯威夫特:

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

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

        [yourDefaults synchronize];
    

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 1970-01-01
      • 2022-01-10
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多