【问题标题】:UIKeyboardWillShowNotification issueUIKeyboardWillShowNotification 问题
【发布时间】:2011-09-07 05:21:07
【问题描述】:

这是我的应用程序的流程。第一个视图 -> 第二个视图 -> 第三个视图

在第三个视图中,当我单击 tableView 的任何一行时,会显示一个 UIView,其中有一个 textField 只接受数字。为此,我实现了 UIKeyboardWillShowNotification 并在键盘的左下角显示了一个用于“点”按钮的 UIButton(为此,我创建了两个图像并将该图像设置为 UIButton 对象)。

我的问题是,在使用这个自定义键盘(2-3 次)后,当我将表单第三个视图重定向到第一个视图时,这个 UIButton(带点图像)出现在第一个视图上。我在那里使用了默认键盘,但这个图像没有消失。

在从第三视图移动到第一视图时,我正在删除我之前注册的键盘通知的 Observer 并且我正在检查是否,

if ([dotButton retainCount] > 0) {

    [dotButton release];
    dotButton = nil;
}

我在 viewDidLoad 中只分配了一次点按钮。 我正在使用 popToRootViewController 方法从第三视图返回到第一视图。

我不想在我的第一个视图上显示这个点按钮。我该怎么做。

【问题讨论】:

  • 请注意,retainCount 永远不能返回 0。

标签: iphone objective-c ios


【解决方案1】:

按照这些步骤 1)首先使 doneButton 成为您的类的实例变量,这将帮助您维护对按钮的引用 2)在你的keyboardWillShow开头添加这段代码:(NSNotification *)note方法

if(dotButton){
[dotButton removeFromSuperview];
dotButton = nil;
}

还有一件事是使用 NSNotificationCenter 实现 UIKeyboardWillHideNotification 方法,并从那里执行第 2 步。

【讨论】:

  • 感谢 Paras 的帮助,我还没有实现 UIKeyboardWillHideNotification 方法。因为它不允许我从第二次开始显示 dotButton 图像。
【解决方案2】:

我假设当您创建 dotButton 时,您正在调用 addSubview: 将其放在屏幕上。

当你想移除它时,你需要通过调用[dotButton removeFromSuperview]来移除它。如果你只是释放它,它仍然会被包含它的视图保留。

最后,你应该永远调用retainCount,除非你正在调试某些东西。我多年来一直在编写 Objective-C 代码,并且我从未使用过retainCount,即使我在做一些奇怪的运行时工作。

规则很简单。如果你需要一个对象来停留,你调用retain。当你完成它时,你调用释放。如果其他人保留了它那不关你的事

【讨论】:

    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多