来自superview的UIView(Container View)内的触发方法
Posted
技术标签:
【中文标题】来自superview的UIView(Container View)内的触发方法【英文标题】:Trigger method inside UIView (Container View) from the superview 【发布时间】:2014-07-25 12:28:56 【问题描述】:我想触发 UIView 刷新setNeedsDisplay
(有效),但还要再次触发 SubView 中的代码,但我无法在任何地方找到它。我试图查看setNeedsDisplay
是否触发了任何视图控制器方法,但没有。
知道如何在容器视图 GUI 元素中实际触发实例化 UIView 的方法吗?
【问题讨论】:
假设子视图是自定义视图,那么你需要暴露一个方法来触发代码。然后,只需找到带有要重绘的视图的子视图并调用该方法(您可以为此使用标签)。 它是 Storyboard 中链接的 UIViewController。您能否进一步解释我如何以一种可以触发该 UIViewController 的方法(真实实例,而不是新实例)的方式绑定它,以便我可以从父视图(我当前所在的那个)修改该子视图中的数据? 你能创建一个 Outlet 到子视图吗? 已经是一个了 :)@property (weak, nonatomic) IBOutlet UIView *productDetailContainer;
这看起来像一个通用的UIView
,而不是自定义视图。您要执行的代码是UIView
的一部分吗?
【参考方案1】:
这里有 3 个选项:
1.使用 segue 就像将数据从一个 VC 传递到另一个 VC
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
// Get reference to the destination view controller
YourViewController *vc = [segue destinationViewController];
// Pass any objects to the view controller here, like...
[vc setMyObjectHere:object];
2。你可以使用 NSNotificationCenter
发布产品按钮操作的方法:
[[NSNotificationCenter defaultCenter] postNotification:@"yourString" object:nil];
然后在Main View(Catalog View Controller)中添加一个监听器:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod:) name:@"yourString" object:nil];
然后在someMethod的实现中触发动作
3.在Catalog VC中,你可以使用self.childViewControllers.lastObject(假设你只有一个孩子,否则使用objectAtIndex:)来引用它的属性。
ProductDetailController *vc = (ProductDetailController *)self.childViewControllers.lastObject;
【讨论】:
以上是关于来自superview的UIView(Container View)内的触发方法的主要内容,如果未能解决你的问题,请参考以下文章
从其 superView 中删除 UIView 并将其框架扩展到全屏
modalViewController 从 superview 中移除后 UIView 消失
尽管 Superview 的位置,但将 UIView 居中在 MainScreen 的中心