2013-04-25 3 views
0

У моего метода есть блок под названием completionBlock. Я хочу, чтобы внутри моей функции вызывал completionBlock(), чтобы добавить фрагмент кода, который будет запущен после этого завершения. Блокировка выполнена.Выполнение фрагмента кода в блоке после выполнения блока

Что-то вроде завершения Блокировка суперблока.

Конечно, я могу сделать это на дне в фактическом блоке, но я использую его во многих местах, и это было бы хлопотно.

Спасибо!

+0

Есть причина, вы не можете просто поместить код после вызова completionBlock? – Chuck

ответ

1

Просто создайте новый блок, который вызывает completionBlock, а затем запускает дополнительный код. Использовать новый блок как блок завершения.

Пример:

- (void)animateDownWithCompletion:(void (^)(BOOL finished))completion { 
    [UIView animateWithDuration:1 animations:^{ 
     CGPoint center = self.view.center; 
     center.y += 10; 
     self.view.center = center; 
    } completion:^(BOOL finished) { 
     if (completion) { 
      completion(finished); 
     } 
     NSLog(@"more completion code here!"); 
    }]; 
} 

Или с переменными:

void (^originalCompletionBlock)(BOOL finished) = ...; 

void (^newCompletionBlock)(BOOL finished) = ^(BOOL finished) { 
    if (originalCompletionBlock) { 
     originalCompletionBlock(finished); 
    } 
    NSLog(@"more completion code here!"); 
}; 
+0

Спасибо, очень хороший код! Хотя на первый взгляд это кажется пугающим. – Devfly

Смежные вопросы