【问题标题】:Detecting UIView modification检测 UIView 修改
【发布时间】:2011-03-15 06:57:24
【问题描述】:

我需要从应用程序委托中检测到主 UIView(用户实际正在观看的视图)已更改。

  1. 他有 iOS 通知吗?
  2. 如果没有,我可以从计时器执行一个函数...但是如何检查主视图(用户实际观看的视图)是否已更改?

-弗雷德

【问题讨论】:

  • @user31 - 你所说的改变是什么意思 - 比如它的框架改变了,子视图被添加或删除,或者其他什么?
  • 我所说的“更改”是什么意思:我的应用程序由每个标签栏的 tabbarcontroller + navControllers 组成...每个 NavigationController 都由 ViewControllers 组成...我想从我的计时器代码中检测到当前视图(用户正在观看)已从上次计时器滴答声中修改...

标签: iphone ipad uiview uiviewcontroller uiapplicationdelegate


【解决方案1】:

你应该为 UIViewController 类调整你的选择器。就像您可以将 viewWillAppear 转换为您创建的 customViewWillAppear。因此,当应用程序将生成对 viewWillAppear 的调用时,您的 swizzled 方法(customViewWillAppear)将被调用。因此,您可以确定,用户更改了屏幕。

不要忘记调用实际方法来执行 viewWillAppear 方法中编写的内容。

【讨论】:

    【解决方案2】:

    如果您希望它是通用的,您可以尝试使用通知。

    在任何 UIView 中,您想要表示其更改“消失”,您可以在 dealloc 方法中添加通知

    -(void)dealloc{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"ViewChanged" object:nil];
    }
    

    在响应更改的代码中,您可以收听“ViewChanged”通知。您可以使用以下代码执行此操作:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewChanged) name:@"ViewChanged" object:nil];
    
    -(void)viewChanged{
     // do what ever you want after the view has changed
    }
    

    【讨论】:

    • 感谢您的回答,但实际上我想避免修改每个视图以添加此修改...如果我的应用程序正在使用第三方库,我不可能添加此通知。这就是为什么我想使用一个计时器来分析 2 个刻度之间的变化......
    【解决方案3】:

    视图可以更改的唯一方法是您的应用在某个级别对其进行更改。

    【讨论】:

    • 感谢您的回答...但我想做的...已经改变(没有任何项目类的知识)。我的想法是在这个附加类中包含一个计时器,用于检查当前显示的视图是否发生了变化......希望这个描述对你来说更清楚。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2011-11-15
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多