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