0

私はiPhoneデバイスで揺れを検出しようとしているので、私が読んだことについては、ビューコントローラーをviewDidAppearメソッドのファーストレスポンダーとして設定する必要があります。このメソッドは自動的に呼び出されるはずですが、何らかの理由でこのメソッドが呼び出されません。viewDidLoad のみが呼び出されます。

これは私のコードです(関連する部分のみを配置します):

BuildHouseViewController.h:

@interface BuildHouseViewController : UIViewController {

BuildHouseViewController.m:

- (void)viewDidLoad {
[super viewDidLoad];
[self.view becomeFirstResponder];}

-(void)viewDidAppear:(BOOL)animated{
[self becomeFirstResponder];
[super viewDidAppear:animated];}

-(BOOL)canBecomeFirstResponder {
return YES;}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{

NSLog(@"shake"); 
if ( event.subtype == UIEventSubtypeMotionShake )
{  }

if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
    [super motionEnded:motion withEvent:event];
}

viewDidAppear メソッドにブレークポイントを追加しましたが、呼び出されません。シェイクが検出されないのは、このメソッドが呼び出されないため、View Controller がファーストレスポンダーにならないためだと思います。なぜこれが起こっているのかわかりません。

どんな助けでも大歓迎です。

編集:

次を使用して、別のビューからビューを呼び出します。

[self.view addSubview:nextScreen.view];

ビューが画面に表示されます

4

4 に答える 4

1

素早い回答ありがとうございます。

面白いものを見つけました。さまざまな方法で問題が発生している同じビューをロードしようとしましたが、異なる結果が得られました

-前に言ったように、次を使用して別のビューから呼び出す場合:

[self.view addSubview:nextScreen.view];

viewDidLoad が呼び出されることはなく、揺れを検出できません。

-AppDelegate から以下を使用して呼び出す場合:

[window addSubview:nextScreen.view];

viewDidLoad が呼び出されます!! 揺れを検出できますが、この解決策は不可能です。別のビューから呼び出すことができるはずです

-次を使用して別のビューから呼び出す場合:

[self presentModalViewController:nextScreen animated:YES];

viewDidLoad が呼び出されます!! ただし、モーダルView Controllerを使用したくありませんが、それが私の問題の唯一の解決策であるように見えます.揺れが検出されます.

最初の方法でビューが正しくロードされないのは奇妙ですが、これはバグですか??

于 2010-02-26T13:22:25.833 に答える
0

@Genericrichのコメントに加えて、サブビューを自分で配置した後、手動でviewDidAppearを呼び出すことができます。

[self.view addSubview:theViewController.view];
[theViewController viewDidAppear:FALSE];

これは私のために働いた。それが他の誰かを助けることを願っています。

于 2010-12-14T09:27:35.000 に答える
0

[self becomeFirstResponder] などは実際にはファーストレスポンダーにはなりません。このメソッドは、ビューがファーストレスポンダーになるときに呼び出されます。だから、それはあなたが思っていることをしていません。

次に、viewDidAppear は、ビューが表示されたときにのみ呼び出されます。画面に表示されていますか?どこに表示するように言っていますか?ビュー コントローラーのビューを別のビューのサブビューとして追加するか、ナビゲーション コントローラー スタックにプッシュするか、モーダル ビューとしてプッシュする必要があります。

于 2010-02-25T19:12:44.623 に答える
0

viewDidAppear:(BOOL)animated は、ビューが UINavigationController または UITabBarController によって表示されている場合にのみ呼び出されます。ビューコントローラーのビューをサブビュー (スクロールビューなど) に追加しても、呼び出されません。あなたはそう思うだろうが、あなたは間違っているだろう. ちょうどこれで自分自身を噛んだ。

于 2010-10-16T00:43:33.393 に答える