【问题标题】:iphone sdk - calling a method of view's superview's viewcontrolleriphone sdk - 调用视图的超级视图的视图控制器的方法
【发布时间】:2010-11-27 05:11:52
【问题描述】:

你好,我如何在当前视图中调用在当前视图的父视图的视图控制器中实现的方法? 你能帮我吗。 谢谢

【问题讨论】:

    标签: iphone uiview uiviewcontroller


    【解决方案1】:

    这是另一种方式:

    SuperviewsViewController *controller = self.superview.nextResponder;
    
    if (controller && [controller isKindOfClass:[SuperviewsViewController class]])
    {
        [controller method];
    }
    

    它应该在大多数情况下都有效。

    Apple's UIResponder Reference

    【讨论】:

      【解决方案2】:

      你可以添加一个函数 -(void)initWithView:(EchiquierDisplayView *)aSuperview 或类似的东西,在你的

      中定义一个引用
      @interface pieceDraggableImageView : UIImageView { 
      CGPoint startLocation; 
      CGPoint startLocationInView;
      EchiquierDisplayView *theSuperview;  
      } 
      
      @property (nonatomic, retain) EchiquierDisplayView *theSuperview;
      
      -(void)correctDestinationPosition; 
      -(void)initWithView:(EchiquierDisplayView *)aSuperview; 
      ...
      -(void)askSuperview;
      @end
      
      @implementation pieceDraggableImageView
      
      ...
      -(void)initWithView:(EchiquierDisplayView *)aSuperview
      {
         theSuperview = aSuperview;
      }
      ...
      -(void) correctDestinationPosition
      {
         [theSuperview correctIt];
      }
      

      现在请务必在您的超级视图中实现函数 correctIt。 希望我能正确理解您的问题...

      【讨论】:

      • 您好,我已经尝试过您的建议。我现在可以访问 [theSuperview correctIt];它编译正确。但我看不到更正。甚至不是 NSlogs。你有什么我应该检查的吗??再次感谢您
      • 我认为您应该通过在更正后调用 correctDestinationPosition 来刷新视图 [self setNeedsDisplay:YES];
      【解决方案3】:

      这通常是通过委托来完成的。

      让您的视图接口定义协议和对某个委托的引用。然后让你的父视图控制器实现这个协议。

      然后父母会这样做:

      someView.fooDelegate = self;
      

      那么视图会做这样的事情:

      if(self.fooDelegate != nil) {
         if([fooDelegate respondsToSelector:...]) {
            [fooDelegate performSelector:...];
         }
      }
      

      这不是编译的,但我想你明白了。

      【讨论】:

        【解决方案4】:

        UIViews 不知道它们的视图控制器。您将需要创建一个自定义 UIView 子类来维护对一个(或可能不止一个)视图控制器的引用,尽管这样做会在 UIView 和 UIViewController 之间引入进一步的耦合。

        您应该考虑在超级视图或视图的类中实现该方法,而不是在视图控制器中实现它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-24
          相关资源
          最近更新 更多