如何让它反映我在UI(文本字段)中立即设置为IBOulet的值?

时间:2009-09-01 08:04:27

标签: cocoa

假设我有十行代码,

1
2
[addressStreet setStringValue:street]
4
5
6
7
8
9
10

其中addressStreet是指向UI和文本字段的IBOutlet street是一个NSString对象。

只有在执行了所有10行之后,我才能在UI中看到更新的值。我的要求是,在执行第3行之后,甚至在执行下一行(No 4)之前,该值应立即反映在UI中。

也试过绑定!负

我有办法实现这个目标吗?

提前Thanx!

2 个答案:

答案 0 :(得分:2)

当您返回UI循环时,该字段会重绘。你的问题是你要花太长时间才能做到这一点。所以,不要这么久。

有很多方法可以做到这一点:

  1. 延迟演出(目前为止最简单)
  2. Grand Central Dispatch(仅限雪豹)
  3. 的NSOperation / NSOperationQueue
  4. 计时器
  5. 线程
  6. 大多数这些都不适合你的情况,但我不知道你的情况是什么(即,所有其他代码行正在做什么),所以我不知道哪些解决方案是合适的,哪些解决方案不适合“T。你必须研究所有这些解决方案,并自己决定哪一个是最合适的。

    简单地告诉现场立即绘制不是解决方案。是的,它立即绘制,但您的用户界面仍然被阻止 - 在您从方法返回之前,您的用户无法执行任何操作,并且解决方案将更快返回。一旦你这样做,告诉现场立即绘制就变得没必要了。

答案 1 :(得分:1)

一般情况下,如果你有一些非常长时间运行的计算会阻止你的UI,那么将它分解成块或者在第二个线程上运行它是个好主意。只要这种方法堵塞主线程,用户就无法与任何东西进行交互。

然而,您问题的直接答案是您需要告诉该字段重绘自己。通常情况下,它会在下一个事件循环中执行此操作,但由于该方法会阻止它出现,所以它不会发生。您可以通过调用[view display]来告知要重绘的视图。