2013-04-25 86 views
0

我的方法有一個塊,稱爲completionBlock。我想在我的函數中調用completionBlock()來添加一段代碼,這個代碼將在這個completionBlock被執行後執行。執行塊後執行塊中的一段代碼

像超級塊的completionBlock。

當然,我可以在實際塊的底部做到這一點,但我在很多地方使用它會很麻煩。

謝謝!

+0

是否有一個原因,你不能只把代碼調用completionBlock後? – Chuck 2013-04-25 21:23:32

回答

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 2013-04-25 20:44:50