2009-10-22 13 views
14

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

私のコードはthis Xcode project(元はthis blogにあります)に基づいています。そのコードはUIKeyboardTypeNumberPadキーボードビューにカスタムUIButton(小数点を表す)を追加します。これは、UIKeyboardWillShowNotificationを購読し、キーボードが現れたときに変更することで行います。

Xcodeプロジェクトは素晴らしいですが、別のUITextFieldを追加すると、そのテキストフィールドに完全に異なるキーボードタイプが選択されているにもかかわらず、カスタムキーがそのテキストフィールドのキーボードに入れられます。

私は1つの特定のUITextFieldからUIKeyboardWillShowNotification通知を参照してください、それが動作するようには思えないだけに登録しようとした:

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

NSNotificationがkeyboardWillShowに渡された内側に、私はまた、オブジェクトを検査しようとしましたが、残念ながら、それはキーボードを意味し、キーボードを表示する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コントロールからの通知を購読する方法が必要ですか?

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

答えて

0

このプロジェクトは素晴らしいですが、余分なUITextFieldを追加すると、カスタムキーがそのテキストフィールドのキーボードにも入れられます。

あなたは例えば、UITextField例えばキーボードのタイプを設定することができます。:

[myTextField setKeyboardType:UIKeyboardTypeDefault]; 

か:

myTextField.keyboardType = UIKeyboardTypeDefault; 

UIKeyboardType定数のリストについてUITextInputTraits Protocol上のXcodeのヘルプを検索します。

+0

のようにそれを使用することができます。 残念ながら、「カスタムキーボード」コードは表示されるキーボードを変更しますが、どのUITextFieldがUIKeyboardWillShowNotification通知を発生させたかを区別する方法がわかりません。私はポストを更新してもう少し明確にしました。 –

-2

私は、私が興味を持ってUIオブジェクトとオブジェクトを比較することによって、前にこれを達成している。このように:。

if(notification.object == exampleViewController.textField) 
{ 
    ... 
} 
+7

これは間違っています。ドキュメントには、通知オブジェクトがnilであることが明確に記載されています。「UIKeyboardWillShowNotification:キーボードの表示の直前に表示されます。通知オブジェクトはnilです。 –

21

は、上記のいずれかが動作するように取得できませんでした。手動で行う必要がありました:

if ([companyName isFirstResponder]) { 
    // ............... 
} 
else if ([notes isFirstResponder]) { 
    //............. 
    } 
} 
2

最初のレスポンダを見つけるために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のを設定し、この

UITextField *textField = (UITextField *)[self firstResponder]; 
+0

これは私のために働いた。 – Stunner

関連する問題