这是我的应用程序的流程。第一视图 - >第二视图 - >第三视图
在第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个视图。
我不想在第一个视图上显示此点按钮。我怎么能这样做。
答案 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步。