2012-03-13 56 views
1

我使用this作爲設置基於塊的操作表的藍圖的一小部分。我對操作表的操作是取消,下載和流。我改變了BlockBasedActionSheet.h到:使用基於塊的操作表

@interface BlockBasedActionSheet : UIActionSheet<UIActionSheetDelegate> { 
} 
@property (copy) void (^cancelBlock)(); 
@property (copy) void (^downloadBlock)(); 
@property (copy) void (^streamBlock)(); 


- (id)initWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelButtonTitle downloadButtonTitle:(NSString *)downloadButtonTitle streamButtonTitle:(NSString *)streamButtonTitle cancelAction:(void (^)())cancelBlock downloadAction:(void (^)())downloadBlock streamAction:(void (^)())streamBlock; 

@end 

和BlockBasedActionSheet.m到:

@implementation BlockBasedActionSheet 
@synthesize cancelBlock = _cancelBlock, streamBlock = _streamBlock, downloadBlock = _downloadBlock; 

- (id)initWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelButtonTitle downloadButtonTitle:(NSString *)downloadButtonTitle streamButtonTitle:(NSString *)streamButtonTitle cancelAction:(void (^)())cancelBlock downloadAction:(void (^)())downloadBlock streamAction:(void (^)())streamBlock 
{ 
self = [super initWithTitle:title delegate:self cancelButtonTitle:cancelButtonTitle destructiveButtonTitle:nil otherButtonTitles:downloadButtonTitle, streamButtonTitle, nil]; 
if (self) { 
    _cancelBlock = Block_copy(cancelBlock); 
    _downloadBlock = Block_copy(downloadBlock); 
    _streamBlock = Block_copy(streamBlock); 
} 
return self; 
} 

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
NSAssert(actionSheet == self, @"Wrong Action Sheet passed"); 
if (buttonIndex == 0) { 
    if (self.cancelBlock) { 
     self.cancelBlock(); 
    } 
} 
if (buttonIndex == 1) { 
    if (self.downloadBlock) { 
     self.downloadBlock(); 
    } 
} 
if (buttonIndex == 2) { 
    if (self.streamBlock) { 
     self.streamBlock(); 
    } 
} 
} 

@end 

在我的TableView didSelectRowAtIndexPath方法,我把以下內容:

BlockBasedActionSheet *askSheet = 
    [[BlockBasedActionSheet alloc] 
    initWithTitle:@"What Do You Want To Do" cancelButtonTitle:@"Cancel" downloadButtonTitle:@"Download" streamButtonTitle:@"Stream" cancelAction:^ { 

}downloadAction:^ { 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    CGRect frame = CGRectMake(0, 49, 160, 50); 
    progress = [[UIProgressView alloc] initWithFrame:frame]; 
    cell.contentView.tag = 100; 
    [cell.contentView addSubview:progress]; 
    RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; 
    NSURL *url = [NSURL URLWithString:entry.articleUrl];  
    self.nameit = entry.articleTitle; 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 
    receivedData = [[NSMutableData alloc] initWithLength:0]; 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES]; 

}streamAction:^ { 
    if (_webViewController == nil) { 
     self.webViewController = [[[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]] autorelease]; 
    } 
    RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; 
    _webViewController.entry = entry; 
    [self.navigationController pushViewController:_webViewController animated:YES]; 
}]; 
[askSheet showInView:self.tabBarController.view]; 
[askSheet release]; 

行動表禮物從上到下: 下載 流 取消

當我按下載時,取消操作執行; 流,下載操作執行; 取消,流動作執行

我做了什麼錯誤,它是失序?

回答

1

試試這個:

if (buttonIndex == [self cancelButtonIndex]) { 
    if (self.cancelBlock) { 
     self.cancelBlock(); 
    } 
} 
if (buttonIndex == [self firstOtherButtonIndex]) { 
    if (self.downloadBlock) { 
     self.downloadBlock(); 
    } 
} 
if (buttonIndex == [self firstOtherButtonIndex] +1) { 
    if (self.streamBlock) { 
     self.streamBlock(); 
    } 
}