objective-c - 在Cocoa中,为什么直到IBAction完全执行之后才会显示文本字段?

标签 objective-c cocoa interface-builder nib ibaction

我有一个 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/

相关文章:

Objective-C:为什么要检查 != nil

ios - 未实现委托(delegate)方法导致崩溃

cocoa - NSString isEqualToString : does not work. 为什么?

iphone - 在界面生成器中设置自动调整大小时出现问题

ios - 在 Storyboard 中设置自动布局约束时,菜单中的同级对象不可用

ios - 如何向 UINavigationBar 添加按钮?

objective-c - 如何生成序列号(注册号)?

iphone - 漫画 - iOS 中的图像动画

swift - 重写绑定(bind)方法 (Swift) - 错误 : Value of type 'Any' has no member 'addObserver'

objective-c - 以编程方式关闭 NSWindow