gpt4 book ai didi

ios - 如果 for 循环正在运行,则无法按下 UIButton

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:01 24 4
gpt4 key购买 nike

这很奇怪,我确信我在这里遗漏了一些基本的东西。

我有的是

  • 两个 UIButtons: button1, button2
  • Touchdown button1 有一个名为 startAction 的 IBAction
  • Touchdown button2 有一个名为 cancelAction 的 IBAction
  • 在 Storyboard中创建了所有这些内容

发生的事情是,当我按下 button1 时,for 循环开始。在这个 for 循环结束之前,我无法再按屏幕上的任何按钮,即我无法按下按钮 2。

我怎样才能做到,当我按下按钮 1 时,我仍然可以通过按下按钮 2 来取消按钮 1 的 for 循环操作。这是我的代码

static bool scanCancelled = NO;

-(IBAction)startAction
{
for (int i=0; i<5000; i++)
{
NSLog(@"i: %d ...", i);

if (scanCancelled == YES)
{
break;
}
}//end for-loop
}

-(IBAction)cancelAction
{
scanCancelled = YES;
}

对于任何对 future 感兴趣的人,我就是这样做的

-(IBAction)startAction2
{
//reset it
scanCancelled = NO;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[self startAction];

});

}

最佳答案

正如其他人所说,您必须使用另一个线程/进程来运行长时间运行的 for 循环,以便 UI 可以继续处理事件等。

但我不建议在 iOS 中使用线程类,除非您习惯于多线程*,否则这看起来有点迟钝*,相反我建议使用 Grand Central Dispatch:https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

使用起来非常简单,并且会向您介绍功能非常强大的 block 。这是一个入门教程:http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial

*综上所述,您应该研究典型的线程模型及其工作原理。这些概念的使用远远超出了 iOS 和 Objective-C。

关于ios - 如果 for 循环正在运行,则无法按下 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18788538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com