0

私のカスタム キーボード (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];
    }

入力を行わず、ボタンを押すとデフォルトのキーボードに切り替わります。アプリケーションが起動されると拡張クラスが実行されると思います。ここでは、キーボード拡張機能の機能とライフサイクルについて少し混乱しています。アプリからの入力テキストを制御するにはどうすればよいですか。どんな助けも大歓迎です。

4

1 に答える 1

1

NSUserDefaults または Documents Directory でさえ、アプリと拡張機能の間でデータを共有するのに役立ちません。これは非常に重大なミスでした。アプリ グループはこれに対するソリューションです。

アプリ グループは、NSUserDefaults データベースを共有する機能です。これは、App Extensions (通知センター ウィジェット、カスタム キーボードなど) でも機能します。アプリ グループ内のすべてのアプリケーションで次のように NSUserDefaults オブジェクトを初期化すると、データベースが共有されます。

目的 C:

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

迅速:

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

各アプリケーションの [NSUserDefaults standardUserDefaults] データベースのすべてがこのデータベースに引き継がれるわけではないことに注意してください。データベースを同期することを忘れないでください。

    [yourDefaults synchronize];
于 2016-02-06T13:36:03.280 に答える