2013-03-12 49 views
1

我想創建一個顯示一個UIActionSheet的功能,等到用戶按下一個按鈕,然後返回按鍵下壓如何要等到一個按鈕的代表被稱爲

@interface UIActionSheetHandler() <UIActionSheetDelegate> 

@end 
@implementation UIActionSheetHandler 


-(NSInteger) buttonIndexWithMessage:(NSString *) title andArrayOfOptions:(NSArray *) options 
{ 

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:title 
                  delegate:self 
                cancelButtonTitle:nil 
               destructiveButtonTitle:nil 
                otherButtonTitles:nil]; 

    for (NSString * strOption in options) { 
     [actionSheet addButtonWithTitle:strOption]; 
    } 

    [actionSheet showInView:[BGMDApplicationsPointers window]]; 

    //Wait till delegate is called. 
    return 0;//I want to return buttonIndex here. 
} 

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    //What should I put it here 
} 
@end 

如何使//等到代表被呼叫等待?哦,我不想讓主線等待,但我想我可以解決這個問題。

+1

爲什麼你想這樣做?按鈕索引將在按下按鈕時被傳遞 – giorashc 2013-03-12 10:16:06

+0

因爲我已經有了一個等待按鈕索引的函數。用這種風格編程會更容易。 – 2013-03-12 11:50:48

+0

介意如果我不同意:) ... – giorashc 2013-03-12 12:43:49

回答

1

這一個工程

self.operation=[NSOperationQueue new]; //These four line is necessary to suspend the whole thread. 
self.operation.suspended=true; //Okay make t 
[self.operation addOperationWithBlock:^{}]; 
[self.operation waitUntilAllOperationsAreFinished];//Don't get out of the function till user act. 

然後在委託

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    self.buttonIndex=buttonIndex; 
    self.operation.suspended=false; 
} 

注:我仍然在尋找一個更優雅的解決方案。

+0

我試圖使用你的上面的代碼。但我的主線程永久停止等待委託功能。我的委託功能是爲GCDAsyncSocket。 – 2013-08-09 06:05:31

2

我想你誤解了委託概念。不能返回按下按鈕從buttonIndexWithMessage:andArrayOfOptions:

事實上,UIActionSheet在當時甚至不可見。

一旦按下按鈕,UIActionSheet將調用您的委託的方法actionSheet:clickedButtonAtIndex:

所以,你放在//What should I put it here there的位置,你將被移交按鈕的索引。在那裏你可以對按鈕做出相應的反應。 例如: -

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSLog (@"Button pressed with index: %d", buttonIndex); 
} 
+0

我很清楚委託概念。我只是想以不同的方式使用它。 – 2013-03-12 12:38:05

+0

啊。然後繼續讓我們知道結果。您可能想要實現自己的警報視圖。 – 2013-03-12 12:48:54

相關問題