按下按钮时如何通过迭代增加int值

时间:2014-07-02 16:20:39

标签: ios objective-c uibutton interface-builder

我正在使用界面构建器,现在为了完成我在xcode中的第一个应用程序,我有一个问题,我没有找到解决方案:如何在按下UIButton的同时通过迭代增加int值?

我已经尝试了很多解决方案但是我已经尝试了最好的迭代是无限的,例如我有两种方法(内部触摸和触摸下调)更改bool值(如果下降bool = true并执行迭代;如果它是bool = false并停止迭代)。

在控制台中打印我有无限的结果:“DOWN,TRUE”

那么,我该怎么做呢?

非常感谢。

2 个答案:

答案 0 :(得分:0)

最有可能发生的事情是你的循环在UI线程上运行。这意味着循环将使用UI线程,直到循环结束。循环完成的唯一方法是触发Touch Up Inside方法。但是,此事件将在UI线程上创建,该线程当前正忙于循环。

您需要使用后台线程来增加int值并打印到控制台。这样,当Touch down事件被触发时,循环将被推送到后台,UI线程可以继续处理将来的触摸事件。

一个很好的资源是Apple开发者网站上的Thread management文档:

不用担心并发编程,这里有一个简单的例子可以解决。

int i = 0;
bool cancelLoop = NO;

- (IBAction)touchDown:(id)sender {
    // Run in background so that the UI thread can continue to process touch events.
    [self performSelectorInBackground:@selector(startLoop) withObject:nil];
}

- (IBAction)touchUpInside:(id)sender {
    [self cancelLoop];
}

- (void)startLoop {
    cancelLoop = NO;
    while(!cancelLoop) {
        NSLog(@"%d", i++);
    }
}

- (void)cancelLoop {
    cancelLoop = YES;
}

答案 1 :(得分:0)

如果您有操作方法,那么只需声明实例变量即可

  @property(assign)NSUInteger i;

现在将动作方法连接到UIButton,当它点击时,只需在动作方法中迭代你的i变量,如下所示: -

  _i++;