我有一个 IBAction,里面有一些简单的代码:
-(IBAction)change:(id)sender {
[textfield setHidden:NO];
[self dolengthyaction];
}
'textfield'是nib文件中的NSTextField,-'dolengthyaction'是一个大约需要一分钟才能完成执行的函数。
我的问题是:为什么在“dolengthyaction”执行完成之后才显示文本字段?我希望在漫长的行动开始之前将其揭晓。这是一个固有的问题还是我的代码有问题? (或者在我的代码的另一部分?)
我仍然不太擅长编程,所以如果我措辞不当或格式错误,我深表歉意。
编辑:除了这个 IBAction 和 -dolengthyaction 之外,没有什么其他的了......
-(void)doLengthyAction {
sleep(10);
}
-(IBAction)change:(id)sender {
[textfield setHidden:NO];
[self doLengthyAction];
[textfield setHidden:YES];
}
我真正想做的就是在操作运行时显示标签并在操作完成时隐藏它。
基本上,这意味着它现在根本不显示。
实际上,在 -doLengthyAction 中,它不是 sleep(10),而是复制大约 50 Mb Material 的 NSFileManager 操作。代码相当长,但如果你想让我发布它我可以。我用 sleep() 测试了它,但它也不起作用。
最佳答案
所有绘图操作(包括隐藏和显示 View )都是从运行循环触发的。在函数返回之前,运行循环无法执行下一个事件。
如果您的操作需要超过一秒的时间才能运行,则应在线程中执行它。完成后,使用 PerformSelectorOnMainThread 在主线程上进行 UI 更改。
关于objective-c - 在Cocoa中,为什么直到IBAction完全执行之后才会显示文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2762160/