我有一个superview,并且我添加了一个子视图来进行选择。在超级视图(主视图)中,我执行以下操作: self.view addSubview:cityViewController.view;
在cityView中,当我完成需要做的事情时,我只需执行self.view removeFromSuperView。
问题是,在superview中,我如何才能知道子视图什么时候已经删除了。
发布于 2011-11-10 04:27:26
有几种方法,但老实说,因为当前的视图控制器(让我们称其为主)只是添加cityViewController的视图,所以保留向当前视图控制器添加/删除视图的处理,而只是让主控制器调用[cityViewController.view removeFromSuperView]
这样,您就可以在收到此通知时执行您想要的任何代码(可以是触发的方法,也可以是UINotification)。
--编辑示例UINotification代码--
main.m
...
//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
-(IBAction) doneButtonClick:(id) sender {
[[NSNotificationCenter defaultCenter] postNotificationName:@"DidFinishView" object:nil];
}发布于 2011-11-10 04:51:02
简单的回答是,你的观点不应该自我删除。对于视图来说,更好的做法是通过对象间通信机制将用户交互与相关的控制器通信。最常见的方法是直接消息传递、协议和通知。iOS框架使用了所有这些,并且有很好的文档对它们进行了解释。下面是一个简短的总结:
MyView始终包含在MyViewController中,并且需要向其发送消息,则可以向MyView类添加一个属性,以保持指向特定MyViewController对象的指针。然后,您可以通过[myView.myViewController userDidTapSaveButton]或whatever.myView向其myViewController发送消息协议定义了对象之间的约定,这些对象除了遵守约定之外,对彼此一无所知。例如,UITableView知道它的委托符合UITableViewDelegate协议,并且它可以向它的委托发送所需的协议消息。任何对象都可以符合UITableViewDelegate protocol.NSNotificationCenter)发布通知。当发布通知的对象不知道或不关心哪些对象正在观察它的notifications.时,通知非常有用
我已经阅读了关于这些方法的相关文档和其他问答。我还会研究一下MVC (模型/视图/控制器)设计模式,这样你就可以更轻松地知道将应用程序逻辑放在哪里。通常,视图应该只负责它的显示(基于它的控制器设置的属性),观察/响应用户操作,并通知它的控制器相关的操作。
https://stackoverflow.com/questions/8071087
复制相似问题