在 Objective-C (iPhone) 中卸载视图

Posted

技术标签:

【中文标题】在 Objective-C (iPhone) 中卸载视图【英文标题】:Unloading a View in 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) 上提供一个按钮,让我关闭它并返回到原始视图。我该怎么做?

【问题讨论】:

【参考方案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];

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

【讨论】:

以上是关于在 Objective-C (iPhone) 中卸载视图的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C (iPhone) 中卸载视图

如何用 Objective-C 判断 iPhone 是不是连接到 wifi 网络?

使用 Objective-C 在 iPhone 上禁用 WIFI

在 Objective-C (iphone) 中,如何管理“@protocol”引用的内存?

在 iPhone 的 Objective-C 中在 (commitEditingStyle) 之外调用 (deleteRowsAtIndexPaths)

如何使用 Objective-c 为 iPhone/iPad 生成设备的唯一 ID