我寫了一個簡單的類LMSVBlocks來輕鬆地顯示警報並獲得1行中的塊回調。希望你會發現它用於此目的的
https://github.com/sourabhverma/LMSVBlocks
理念:爲了使UIAlertView中塊兼容,你需要另一個類(說LMSVBlockAlert)來處理的委託方法,當UIAlertView中代表會給回調,LMSVBlockAlert班級可以在該塊中發回電話。
代碼: (LMSVBlockAlert。米)
保持LMSVBlockAlert的所有實例在數組中,使他們有很強的借鑑意義
static NSMutableArray *_LMSVblockHandlersArray = nil;
保持塊處理程序LMSVBlockAlert
@interface LMSVBlockAlert() <UIAlertViewDelegate>
@property (nonatomic, copy) void (^cancelCompletionBlock)();
@property (nonatomic, copy) void (^confirmCompletionBlock)();
@end
當一個新的警報被觸發創建新LMSVBlockAlert實例,它具有UIAlertView和代理回調
+(LMSVBlockAlert*)newInstance{
LMSVBlockAlert *newIns = [[LMSVBlockAlert alloc] init];
[LMSVBlockAlert updateHandlerArrayWith:newIns];
return newIns;
}
當警報委託在LMSVBlockAlert被觸發發送回調來阻止,並從內存
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
switch (buttonIndex) {
case 0://Cancel
{
if(_cancelCompletionBlock){
_cancelCompletionBlock();
}
}
break;
case 1://OK
{
if(_confirmCompletionBlock){
_confirmCompletionBlock(alertView);
}
}
break;
default:
break;
}
[_LMSVblockHandlersArray removeObject:self];
}
現在很清楚這一點,你可以有兩種簡單的方法,可以給你UIAlertView中回調
+(UIAlertView*)promptAlertTwoBtn:(NSString*)msg title:(NSString*)title onCancel:(void (^)())onCancel onConfirm:(void (^)())onConfirm{
return [[LMSVBlockAlert newInstance] showAlertMainWithTitle:title msg:msg onCancel:^{
onCancel();
} onConfirm:^(UIAlertView *alertView) {
onConfirm();
}];
}
-(UIAlertView*)showAlertMainWithTitle:(NSString*)title msg:(NSString*)msg onCancel:(void (^)())onCancel onConfirm:(void (^)(UIAlertView*))onConfirm{
UIAlertView *newAlert = nil;
newAlert = [[UIAlertView alloc]
initWithTitle:title
message:msg
delegate:self
@"Cancel"
otherButtonTitles:@"Confirm", nil];
[newAlert show];
self.cancelCompletionBlock = onCancel;
self.confirmCompletionBlock = onConfirm;
return newAlert;
}
最後 希望你發現它很有用..
在這個答案中,你沒有顯示你指的是哪個頭文件/實現文件。您還介紹自定義警報概念,而不解釋它如何適用於解決方案。這迫使讀者猜測你的意圖(這總是不好)。爲了澄清這些錯失的機會,可以改進答案。 –
我所指的頭文件和實現文件是你的,不是我的。因此,我無法爲您提供一個,因爲這意味着要放入您的代碼中。但您是對的,我沒有提供_completion調用。我已經補充說。 –
當你提到一個頭文件和實現文件時,這是如何配合的?它是一個視圖控制器還是它是自定義警報的子類?對不起,如果我以前的請求不清楚。我可以簡單地假設後者,但特異性總是更好。 –