首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios superview和subview

ios superview和subview
EN

Stack Overflow用户
提问于 2011-11-10 04:21:11
回答 2查看 6K关注 0票数 0

我有一个superview,并且我添加了一个子视图来进行选择。在超级视图(主视图)中,我执行以下操作: self.view addSubview:cityViewController.view;

在cityView中,当我完成需要做的事情时,我只需执行self.view removeFromSuperView。

问题是,在superview中,我如何才能知道子视图什么时候已经删除了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-10 04:27:26

有几种方法,但老实说,因为当前的视图控制器(让我们称其为主)只是添加cityViewController的视图,所以保留向当前视图控制器添加/删除视图的处理,而只是让主控制器调用[cityViewController.view removeFromSuperView]

这样,您就可以在收到此通知时执行您想要的任何代码(可以是触发的方法,也可以是UINotification)。

--编辑示例UINotification代码--

main.m

代码语言:javascript
复制
...
//Define cityViewController as an iVar and alloc/init it
[[UINotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishView:) name:@"DidFinishView" object:nil];
[self.view addSubview:cityViewController.view];
...

-(void) didFinishView:(NSNotification *)notification {
    [cityViewController.view removeFromSuperView];
}

CityViewController.m

代码语言:javascript
复制
-(IBAction) doneButtonClick:(id) sender {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DidFinishView" object:nil];
}
票数 3
EN

Stack Overflow用户

发布于 2011-11-10 04:51:02

简单的回答是,你的观点不应该自我删除。对于视图来说,更好的做法是通过对象间通信机制将用户交互与相关的控制器通信。最常见的方法是直接消息传递、协议和通知。iOS框架使用了所有这些,并且有很好的文档对它们进行了解释。下面是一个简短的总结:

  • 直接消息传递。当对象需要与已知类型的特定对象进行通信时,请使用此选项。例如,如果MyView始终包含在MyViewController中,并且需要向其发送消息,则可以向MyView类添加一个属性,以保持指向特定MyViewController对象的指针。然后,您可以通过[myView.myViewController userDidTapSaveButton]或whatever.
  • Protocols.从myView向其myViewController发送消息协议定义了对象之间的约定,这些对象除了遵守约定之外,对彼此一无所知。例如,UITableView知道它的委托符合UITableViewDelegate协议,并且它可以向它的委托发送所需的协议消息。任何对象都可以符合UITableViewDelegate protocol.
  • Notifications.通知允许对象通过其他对象可以观察和响应的中央机制(NSNotificationCenter)发布通知。当发布通知的对象不知道或不关心哪些对象正在观察它的notifications.

时,通知非常有用

我已经阅读了关于这些方法的相关文档和其他问答。我还会研究一下MVC (模型/视图/控制器)设计模式,这样你就可以更轻松地知道将应用程序逻辑放在哪里。通常,视图应该只负责它的显示(基于它的控制器设置的属性),观察/响应用户操作,并通知它的控制器相关的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8071087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档