0

私は現在、タップが iPad と同じように iPhone で処理されるアプリに取り組んでいます。私は iPhone を持っていないので、今のところシミュレーターを使用してテストしています。シミュレーターがタップをシミュレートする場合は、マウスで画面をクリックするだけでよいと思っていましたが、うまくいかないようです。

だから、問題は iPad から始めて、後で iPhone インターフェースを作成したことにあるのではないかと考えました (プロジェクト自体は最初から汎用的でしたが)。

ジェスチャ レコグナイザー (タップと 2 回のスワイプ) を iPad のストーリーボードからコピーし、iPhone のストーリーボードに貼り付けました。これがうまくいくとは思っていませんでしたが、それだけでいいと思っていました。いずれにせよ、両方のストーリーボード ジェスチャ レコグナイザーから同じコードをリンクできるはずです。

それがうまくいかないときは、iPad のときと同じように Control-drag を使って iPhone のジェスチャ認識機能を接続した。これにより、新しい方法が作成されました。同じコードを使用できるので、単純にもう一方を呼び出すことにしました。

- (IBAction)tapIphone:(UITapGestureRecognizer *)sender {
   [self tapIpad:sender];
}
- (IBAction)tapIpad:(UITapGestureRecognizer *)sender {

省略されたコード

}

それもうまくいきませんでした。ということで、次はiPadの方法からiPhoneの方法にコードをコピペしてみました。それでもうまくいきませんでした。

だから今、iPhoneシミュレーターでタップを正しくテストする方法がわからないのではないかと思っています。他に何を見逃したでしょうか?

4

1 に答える 1

0

tapIphone メソッドがまったく呼び出されていないことは明らかです。メソッドに @NSLog("tapIphone") を追加することで解決できます。ログが記録されるかどうかを確認してください。実際、これらの行をそれぞれのメソッドに入れます。

@NSLog("tapIphone");
@NSLog("tapIpad");

tapIphone が呼び出されており、tapIpad メソッドが同じクラスにある場合は、予期された動作が発生するはずです。

あるストーリーボードから別のストーリーボードに項目をコピー アンド ペーストする最初の直感は問題ありません。ただし、これを行うと、すべての IBAction / IBOutlet 接続が失われるため (古いストーリーボードとの間のリンクは引き継がれず、移動するだけです)、毎回それらを再配線する必要があります。あるデバイスのインターフェイスを別のデバイスに適応させようとするとき、これは少し面倒です。これは、新しいコードを作成する必要があるという意味ではありません。各ストーリーボード アイテムから、再接続する既存のIBAction コード アイテムに CRTL キーを押しながらドラッグする必要があることを意味します (ストーリーボードから CTRL キーを押しながらドラッグすると、同じ結果が得られます)。項目を関連する controlView ストーリーボード アイコンに追加すると、接続先のオプションの IBAction 項目のリストが表示されます)。レプリケートする IBOutlet 接続についても同様です。

これはシミュレータの問題ではありません。ストーリーボードの配線に関する理解を微調整する必要があるだけです。

さまざまなデバイスでさまざまな動作を処理する方法として、個別の IBAction メソッドを提案することはお勧めしません。これにより配線が複雑になり、デバッグが煩わしくなります。たとえば、環境の機能を確認したり、以下を使用したりするなど、より良い方法があります。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
   //iPhone code goes here
} else  {
   //ipad code goes here
}
于 2013-01-07T02:54:14.473 に答える