当从协议方法调用时,presentModalViewController不想工作

时间:2010-05-21 19:24:18

标签: iphone xcode presentmodalviewcontroller

我有一个子视图,当双击子视图的父视图控制器上的协议方法被调用时......

- (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];
}

调用协议方法并且运行时没有任何错误,但模态视图不会出现。

我暂时将协议方法的代码复制到父视图按钮之一的IBAction方法中,以将其与子视图隔离。当我点击此按钮时,模态视图工作正常。

谁能告诉我我做错了什么?为什么从父视图上的按钮执行时,而不是从子视图调用的协议方法执行它。

到目前为止,我试图解决这个问题......

  1. 重新启动xCode和模拟器
  2. 跑到设备上(iTouch)
  3. 呈现eventEditViewController而不是navigationController
  4. 使用Push而不是presentModal。
  5. 将带有performSelector的协议的调用直接延迟到协议,调用协议方法的子视图中的另一个方法,从protocol方法到另一个带有presentModal调用的方法。
  6. 使用计时器。
  7. 我目前正在设置它,以便协议方法调用一个呈现不同视图的已知工作方法。在调用presentModalViewController之前,它会弹出一个每次都有效的UIAlertView,但是当通过协议方法调用时,模态视图拒绝显示。

    我很难过。也许它与我从UIView类而不是UIViewController类调用协议方法的事实有关。也许我需要为subView创建一个UIViewController?

    谢谢,

    约翰

1 个答案:

答案 0 :(得分:0)

在另一个论坛的帮助下,我解决了这个问题。我在父UIView中创建了drawRect的子视图。我将子视图的创建移动到viewController,并将它们作为子视图添加到父scrollView。现在一切都像冠军一样。

约翰