【问题标题】:Unloading a View in Objective-C (iPhone)在 Objective-C (iPhone) 中卸载视图
【发布时间】:2012-01-28 02:27:49
【问题描述】:

我有一个基于视图的应用程序。加载的第一个视图有一个按钮,该按钮使用以下代码加载另一个视图:

AddPost *addView = [[AddPost alloc] initWithNibName:@"AddPost" bundle:nil];
addView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:addView animated:YES];

我想做的是在视图 (AddPost) 上提供一个按钮,让我关闭它并返回到原始视图。我该怎么做?

【问题讨论】:

    标签: iphone objective-c view


    【解决方案1】:

    看起来有点奇怪,但实际上可以调用 addView:

    [self dismissModalViewControllerAnimated:YES];
    

    来自文档:

    "父视图控制器负责关闭它使用 presentModalViewController:animated: 方法呈现的模态视图控制器。但是,如果您在模态视图控制器本身上调用此方法,模态视图控制器会自动将消息转发给它的父视图控制器。”

    【讨论】:

      【解决方案2】:

      康拉德给出的答案将非常有效。以稍微更好的封装的名义,您可以在 addView 上放置一个委托协议,并让您的第一个视图实现它。

      所以在你的 addView 控制器的头文件中:

      @protocol addViewDelegate <NSObject>
          - (void)addViewRequestDismissal;
      @end
      

      您还需要在 addView 控制器上正确设置一个外部:

      @property (assign) id<addViewDelegate> delegate;
      

      然后让你的第一个视图控制器实现这个,所以在它的 .h 文件中你应该有

      @interface firstView : NSObject <addViewDelegate> {
      }
      

      当你实例化你的 addView 时记得设置委托:

      addView.delegate = self;
      

      在 addView 控制器中按下按钮时回调:

      - (void)buttonPressed {
          [self.delegate addViewRequestDismissal];
      }
      

      最后在你的第一个视图中记得实现这个方法

      - (void)addViewRequestDismissal {
          [self dismissModalViewControllerAnimated:YES];
      }
      

      希望一切顺利。如果您有任何进一步的问题,请回帖:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        相关资源
        最近更新 更多