15

アプリケーションでカスタマイズされたキーボードを使用しようとしていますが、特定のUITextFieldに制限しようとすると問題が発生します。

私はこのXcodeプロジェクト(元々はこのブログにあります)に基づいてコードを作成しました。このコードは、カスタムUIButton(「小数点」を表す)をUIKeyboardTypeNumberPadキーボードビューに追加します。これは、UIKeyboardWillShowNotificationをサブスクライブし、表示されたときにキーボードを変更することによって行われます。

そのXcodeプロジェクトはうまく機能しますが、UITextFieldを追加すると、そのテキストフィールドにまったく異なるキーボードタイプを選択した場合でも、カスタムキーがそのテキストフィールドのキーボードにも挿入されます。

1つの特定のUITextFieldからのUIKeyboardWillShowNotification通知のみを表示するように登録しようとしましたが、機能しないようです。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:exampleViewController.textField];

また、keyboardWillShowに渡されたNSNotification内のオブジェクトを検査しようとしましたが、残念ながら、キーボードが表示される原因となったUIコントロールではなく、キーボードを参照しています。

2009-10-21 19:50:22.205 Example[6302:207] NSConcreteNotification 0x321ebd0 {name = UIKeyboardWillShowNotification; userInfo = {
UIKeyboardAnimationCurveUserInfoKey = 0;
UIKeyboardAnimationDurationUserInfoKey = 0.300000011920929;
UIKeyboardBoundsUserInfoKey = NSRect: {{0, 0}, {320, 216}};
UIKeyboardCenterBeginUserInfoKey = NSPoint: {160, 588};
UIKeyboardCenterEndUserInfoKey = NSPoint: {160, 372};

}}

addObserverインターフェースを誤解していますか?確かに、特定のUIコントロールからの通知をサブスクライブする方法が必要ですか?

誰かがこれを達成する方法について他に何か提案がありますか?

4

5 に答える 5

25

上記のいずれも機能しませんでした。手動で行う必要がありました:

if ([companyName isFirstResponder]) {
    // ...............
}
else if ([notes isFirstResponder]) {
    //.............
    }
}
于 2010-05-16T18:01:02.987 に答える
3

UIView カテゴリ メソッドを記述して、ファーストレスポンダーを見つけることができます。

- (UIView *)firstResponder
{
    if ([self isFirstResponder])
    {
        return self;
    }

    for (UIView *view in self.subviews)
    {
        UIView *firstResponder= [view firstResponder];
        if (firstResponder)
        {
            return firstResponder;
        }
    }

    return nil;
}

次に、- (void)keyboardWillShow:(NSNotification *)notificationメソッドで次のように使用できます

  UITextField *textField = (UITextField *)[self firstResponder];
于 2015-05-11T12:16:41.930 に答える
0

そのプロジェクトはうまく機能しますが、追加の UITextField を追加すると、そのテキスト フィールドのキーボードにもカスタム キーが入力されます。

UITextFieldインスタンスのキーボード タイプを設定できます。

[myTextField setKeyboardType:UIKeyboardTypeDefault];

また:

myTextField.keyboardType = UIKeyboardTypeDefault;

定数UITextInputTraits Protocolのリストについては、Xcode のヘルプを検索してください。UIKeyboardType

于 2009-10-22T01:29:04.460 に答える
-2

オブジェクトを興味のあるUIオブジェクトと比較することで、以前にこれを達成しました。次のように:

if(notification.object == exampleViewController.textField)
{
  ...
}
于 2009-11-24T16:20:26.453 に答える