【问题标题】:Trigger method inside UIView (Container View) from the superview来自superview的UIView(Container View)内的触发方法
【发布时间】:2014-07-25 12:28:56
【问题描述】:

我想触发 UIView 刷新setNeedsDisplay(有效),但还要再次触发 SubView 中的代码,但我无法在任何地方找到它。我试图查看setNeedsDisplay 是否触发了任何视图控制器方法,但没有。

知道如何在容器视图 GUI 元素中实际触发实例化 UIView 的方法吗?

【问题讨论】:

  • 假设子视图是自定义视图,那么你需要暴露一个方法来触发代码。然后,只需找到带有要重绘的视图的子视图并调用该方法(您可以为此使用标签)。
  • 它是 Storyboard 中链接的 UIViewController。您能否进一步解释我如何以一种可以触发该 UIViewController 的方法(真实实例,而不是新实例)的方式绑定它,以便我可以从父视图(我当前所在的那个)修改该子视图中的数据?
  • 你能创建一个 Outlet 到子视图吗?
  • 已经是一个了 :) @property (weak, nonatomic) IBOutlet UIView *productDetailContainer;
  • 这看起来像一个通用的UIView,而不是自定义视图。您要执行的代码是UIView 的一部分吗?

标签: ios 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;

【讨论】:

    猜你喜欢
    • 2014-08-29
    • 1970-01-01
    • 2013-04-09
    • 2019-08-09
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    相关资源
    最近更新 更多