ランドスケープ ビューに UITextField があり、UIKeyboard ビューの右下にある [キーボードを閉じる] ボタンを押しても、キーボードが消えません。このキーが押されたときにプログラムでリッスンする方法はありますか? または、このキーボードがなくなる原因となる、私が見ていない接続がありますか? これは iOS 4 と XCode 4 です。ありがとう。
3 に答える
今日も同じ問題があり、Apple の KeyboardAccessory サンプル コードで機能するのだろうかと思いました。そこでリバースエンジニアリングを行いました。ViewController は、私の場合の間違いではありませんでした。
UIApplicationDelegate の実装には、ルート ビューコントローラーとウィンドウがセットアップされるアプリケーションのエントリ ポイントがあります- (void) applicationDidFinishLaunching:(UIApplication *)application
。ルート ビューコントローラー ビューをウィンドウにサブビューとして追加するのを忘れた場合、dismiss-keyboard-button はアプリのどのビューでも機能しません。
@class ViewController;
@interface KeyboardAccessoryAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ViewController *viewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ViewController *viewController;
@end
...
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
メインの xib ファイルでアウトレットを設定することを忘れないでください。
これがキーボードの動作に関連している理由がわかりません。しかし、私の理論では、レスポンダーチェーンはウィンドウにリンクされていませんが、必要です。
キーボード入力を受け入れるテキスト フィールドに、ファーストレスポンダではなくなるように指示する必要があります。
[UITextField resignFirstRepsonder];
キーボードを閉じるボタンを使用してキーボードを閉じるには、デリゲート メソッドを実装する必要があります。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//Check if your text field is first responder, and if it is, have it resign
}
または、キーボードの外側をタップしてキーボードを閉じたい場合は、
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UIView* view in self.view.subviews)
{
if ([view isKindOfClass:[UITextField class]]) {
[view resignFirstResponder];
}
if ([view isKindOfClass:[UITextView class]]) {
[view resignFirstResponder];
}
}
}