2

カードオブジェクト (UIViewControllers ) をインスタンス化するボード(UIViewController) があります。各カードにはtexfieldがあります。非カード領域 (= ボードのビュー) をクリックしてキーボードを削除するには、UITapGestureRecognizerで指定されたボードへの参照が必要です。これが私の現在のアプローチです。

ボード(UIViewController) カード オブジェクトの初期化

-(void) addCard:(id)touchEvent{
    CardViewController *card = [[CardViewController alloc]initItemWithText:@"..."];
    [self addChildViewController:card];
    [self.view addSubview:card.view];
}

カード(UIViewController) init で、Tap Gesture Recognizer を追加します

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
...
    UITapGestureRecognizer *tapBackground = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapBackground:)];
    [self.parentViewController.view addGestureRecognizer:tapBackground];
...
}

parentViewController メソッドを使用した「バックグラウンド」参照が機能していないようです。なんで?

カードからボードに戻り、カードのファーストレスポンダーをすぐに辞任するにはどうすればよいですか?

4

2 に答える 2

3

Card ではなく Board にジェスチャ コードを追加してみてください (viewDidLoad 内)。

UITapGestureRecognizer *tapBackground = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapBackground:)];
[self.view addGestureRecognizer:tapBackground];
于 2013-01-24T13:03:31.140 に答える
1
  1. ビューにボタンを配置する
  2. ボタンを押して、Editor>Arrange>Send to back
  3. 次に、ボタンのタイプを Round rect to Custom に変更し、ボタンがすべてのビューをカバーするようにします。

ViewController.h 内

@interface ViewController : UIViewController {

IBOutlet UITextField *textField

}

-(IBAction)bgTouched:(id)sender;

@end

ViewController.m 内

-(IBAction)bgTouched:(id)sender {

[textField resignFirstResponder]

}

4 . textField を Text Field に接続し、bgTouched をバックグラウンドのボタンに接続します。

于 2013-01-24T13:46:19.030 に答える