2012-03-13 2 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]; 

Действие Листовые Presents сверху вниз: Скачать Поток Отмена

Когда я нажимаю «Загрузить», действие «Отмена» выполняется; Поток, действие Download выполняет; Отмена, Операция Потока

Что я сделал не так, что он выходит из строя?

ответ

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(); 
    } 
} 
Смежные вопросы