【问题标题】:iOS - UIKeyboardWillShowNotification called multiple Times when lock screeniOS - 锁定屏幕时多次调用 UIKeyboardWillShowNotification
【发布时间】:2016-09-06 10:00:10
【问题描述】:

我在 viewdidload UIKeyboardWillShowNotification 上创建一个通知,并在 viewwilldisappear 上删除它。

当键盘出现在屏幕上并且它的通知按预期被调用一次时,我锁定了屏幕。该通知被调用 4 次并创建了不需要的功能。

为什么要调用通知?我该如何预防这种情况?

我正在以这种方式在 viewdidload 中添加通知的观察者

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

编辑: 如果我将应用程序发送到后台而不是锁定屏幕,结果相同。

【问题讨论】:

    标签: ios objective-c nsnotificationcenter


    【解决方案1】:

    同样的事情发生在我身上

    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillShow:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
    

    我在按钮点击时展示了一个视图控制器。每次我呈现 Viewcontroller viewdidload 时都会调用它添加 addObserver。因此该方法会被多次调用。

    【讨论】:

    • 在我的情况下,它只被调用一次而不是多次
    • @Hassy 当应用程序进入后台 UIKeyboardWillShowNotification 多次触发。可能是操作系统问题。
    • 是的,很可能是操作系统问题。
    【解决方案2】:

    在您的情况下,通知多次调用显示 addObserver 多次调用,或者您在使用完成后不会删除观察者。

    只需遵循以下内容:

    • 正如您提到的,您正在删除viewwilldisappear 方法中的观察者。所以尝试调试并查看它是否被调用。如果此方法未被调用,请尝试在 viewDidUnload 方法中将其删除。
    • 如果您仍然无法删除观察者,只需将删除观察者代码放在添加观察者行之前即可。就是这样。它肯定会起作用。

    注意:

    • 我向您建议的解决方案已经过尝试和测试,并且对我来说效果很好。

    希望对你有所帮助。

    【讨论】:

    • 你说的肯定行得通。但问题是我为键盘添加的观察者通知在 viewdidload 中被触发一次,并且不再被初始化。 viewwilldisappear 在将应用程序发送到后台时不会被调用,这两个视图都没有加载。这必须是苹果的问题。如果我没有收到关于确切问题的更多回复,我会将您的答案标记为正确。
    • @ghazi_jaffary 我建议您调试并查看哪个视图控制器委托方法调用。就像 viewDidUnload 可能会在您的情况下调用一样
    • @ghazi_jaffary 你是在展示你添加观察者的视图控制器吗?
    • 是的,它正在使用导航控制器进行推送
    • @Mack 没有一个 UIViewController 委托被调用。视图将消失并卸载。应用程序正在进入后台,但 viewcontroller 并没有作为活动的 viewcontroller 进入内存中的任何地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多