0

サブビューの親View Controllerでプロトコルメソッドをダブルタップすると、このように呼び出されるサブビューがあります...

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  UITouch *theTouch = [touches anyObject];
  if (theTouch.tapCount == 1) {

  } else if (theTouch.tapCount == 2) {
      if ([self.delegate respondsToSelector:@selector(editEvent:)]) {
           [self.delegate editEvent:dictionary];
      }
  }
}

これは、辞書を消費するコードを削除したプロトコルメソッドです...

- (void)editEvent:(NSDictionary){
  EventEditViewController *eventEditViewController =
     [[EventEditViewController alloc]
     initWithNibName:@"EventEditViewController" bundle:nil];
  eventEditViewController.delegate = self;  

  navigationController = [[UINavigationController alloc]
       initWithRootViewController:eventEditViewController];
  [self presentModalViewController:navigationController animated:YES];      
  [eventEditViewController release];
}

プロトコル メソッドが呼び出され、エラーなしで実行されますが、モーダル ビュー自体は表示されません。

親のビュー ボタンの 1 つをサブビューから分離するために、プロトコル メソッドのコードを IBAction メソッドに一時的にコピーしました。このボタンをタップすると、モーダル ビューが正常に動作します。

誰が私が間違っているのか教えてもらえますか? サブビューから呼び出されたプロトコルメソッドからではなく、親ビューのボタンから実行すると機能するのはなぜですか。

問題を回避するためにこれまでに試したことは次のとおりです...

  1. xCodeとシミュレーターを再起動しました
  2. デバイス上で実行 (iTouch)
  3. navigationController の代わりに eventEditViewController を提示する
  4. presentModal の代わりに Push を使用します。
  5. performSelector を使用してプロトコルへの呼び出しを遅延させ、プロトコル メソッドを呼び出すサブビュー内の別のメソッドへ、プロトコル メソッドから presentModal 呼び出しを使用して別のメソッドへ。
  6. タイマーの使用。

私は現在、プロトコルメソッドが別のビューを提示する既知の作業メソッドを呼び出すようにセットアップしています。presentModalViewController を呼び出す前に、毎回動作する UIAlertView をポップしますが、プロトコル メソッドを介して呼び出された場合、モーダル ビューは表示を拒否します。

私は困惑しています。おそらく、UIViewController クラスではなく UIView クラスからプロトコル メソッドを呼び出しているという事実と関係があります。たぶん、サブビュー用の UIViewController を作成する必要がありますか??

ありがとう、

ジョン

4

1 に答える 1

0

別のフォーラムの助けを借りて、この問題を解決しました。親UIViewのdrawRectからサブビューを作成していました。サブビューの作成をviewControllerに移動し、それらをサブビューとして親scrollViewに追加しました。すべてがチャンピオンのように機能するようになりました。

ジョン

于 2010-05-22T05:15:26.140 に答える