UIKeyboardWillShowNotification问题

时间:2011-09-07 05:21:08

标签: iphone objective-c ios

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

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

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

在从第3个视图移动到第1个视图的同时,我删除了Observer以获取我之前注册的键盘通知&我也在检查,

if ([dotButton retainCount] > 0) {

    [dotButton release];
    dotButton = nil;
}

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

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

2 个答案:

答案 0 :(得分:1)

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

如果要删除它,则需要通过调用[dotButton removeFromSuperview]删除。如果你只是发布它,它仍然会被包含它的视图保留。

最后,你应该从不调用retainCount,除非你正在调试。我多年来一直在编写Objective-C代码,而且从未使用retainCount,即使我在做奇怪的运行时也是如此。

规则很简单。如果你需要一个物体,你可以叫保留。当你完成它后,你打电话给释放。如果其他人保留了那不属于您的业务

答案 1 :(得分:1)

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

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

还有一件事是在NSNotificationCenter上实施UIKeyboardWillHideNotification方法,并在那里执行第2步。