UILabel不会每次都使用for循环更新

时间:2014-04-22 12:13:26

标签: ios objective-c arrays uilabel

我试图在我的UICollectionViewCell中设置我的标签动画。我想随机遍历数组并随机设置标签10次然后它停在我的数组中的随机字符串。

问题是,它通过我的数组(用简单的NSLog调试它)但是标签setText不会被用到我的循环的最后一个数字,然后设置标签。

这是我的代码:

-(void)animate{

    long index;

    for(detail* cells in [[self col] visibleCells]){

        NSIndexPath *indexPath = [[self col] indexPathForCell:cells];

        if ([array count] >= 3) {
            index = 2 * indexPath.section + indexPath.row;
        }else{
            index = 1 * indexPath.section + indexPath.row;
        }

        for (int i = 0; i <= 10; i++) {
            [[cells detailLabel] setText: [[array objectAtIndex:index] returnRandomOptie]];
            [NSThread sleepForTimeInterval:0.10];
            NSLog(@"%i", i);
        }

    }
}

这是我自定义Cell类的returnRandomOptie

-(NSString *) returnRandomOptie {
    NSUInteger randomIndex;
    NSString *string;

    if ([opties count] != 0) {
        randomIndex = arc4random() % [opties count];
        string = [NSString stringWithFormat:@"%@", [opties objectAtIndex:randomIndex]];
    }

    return string;
}

所以基本上我想在我的animate方法中使用for循环,总是在我的标签中设置文本。而现在它并没有这样做。就在最后一个循环中。

我做错了什么?

亲切的问候!

2 个答案:

答案 0 :(得分:4)

您必须执行睡眠异步并更新主线程中的标签,请尝试以下方法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    for (int i = 0; i <= 10; i++) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [[cells detailLabel] setText: [[array objectAtIndex:index] returnRandomOptie]];
        });
        [NSThread sleepForTimeInterval:0.10];
        NSLog(@"%i", i);
    }
});    

答案 1 :(得分:0)

试试这个,

-(void)animate{
   ....
   for (int i = 0; i <= 10; i++) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [[cells detailLabel] setText: [[array objectAtIndex:index] returnRandomOptie]];
            });

            [NSThread sleepForTimeInterval:0.10];
            NSLog(@"%i", i);
   }
   ...
}