我对目标c有一些乐趣。作为一个简单的程序,我想编写一个时钟应用程序。
基本上,UITextField需要显示当前时间并每秒更新一次。
我最初的想法是使用委托,让UITextField在“Value Changed”事件发生时回调一个类。通过'bootstrapping'初始值更改(例如,通过在应用程序启动时设置时间),我认为我可以在之后不断触发'Value Changed'事件(UITextField将不断更改自身,从而触发委托方法)。我尝试了很多东西,但这从未奏效。我甚至尝试创建一个按钮,将UITextField设置为任意文本值(而不是在启动时设置UITextField),希望调用委托方法,但这也没有。为了证明我的代码是正确的,当我使用其他操作(例如“Touch Down”)时更新时间:我会在UITextField中的每次点击都获得时间。
我最终发现我可以通过使用[self performSelector ...]每秒使用一次回调,这样就可以了。
我国代表团使用“价值变化”行动的根本原因是否有效?
答案 0 :(得分:1)
值更改事件仅在响应用户事件时触发 - 也就是说,您设置的textField.text = "something"
不会触发它。
它不是很好,因为通过它的声音,你试图让你的应用程序进入无限循环。如果在框中设置文本时,“值已更改”事件确实触发,则程序将再次询问代理,这将再次设置文本,这将再次询问代表.....你得到了图片。这称为 无限循环 ,它会导致程序挂起,然后崩溃,因为程序执行无法退出此循环。
无论如何,为了做你说的话,你有两个选择
您可以设置NSTimer对象以每秒调用您的时间更新方法。这很简单,请查看the documentation。
performSelector:withObject:afterDelay:
。听起来你可能已经掌握了这个。它不像使用NSTimer那样整洁,但它可以完成这项工作。