2011-02-18 150 views
0

您好我有以下代码,我想在UIAlertView上为UIAlertView添加UITableView,我已经在UIAlertTableView中为UIAlertView添加了子类。如何加载tableView中的数据

#import "UIAlertTableView.h" 

#define kTablePadding 8.0f 


@interface UIAlertView (private) 
- (void)layoutAnimated:(BOOL)fp8; 
@end 

@implementation UIAlertTableView 

@synthesize dataSource; 
@synthesize tableDelegate; 
@synthesize tableHeight; 
@synthesize tableView; 

- (void)layoutAnimated:(BOOL)fp8 { 
    [super layoutAnimated:fp8]; 
    [self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y - tableExtHeight/2, self.frame.size.width, self.frame.size.height + tableExtHeight)]; 

    // We get the lowest non-control view (i.e. Labels) so we can place the table view just below 
    UIView *lowestView; 
    int i = 0; 
    while (![[self.subviews objectAtIndex:i] isKindOfClass:[UIControl class]]) { 
     lowestView = [self.subviews objectAtIndex:i]; 
     i++; 
    } 

    CGFloat tableWidth = 262.0f; 

    tableView.frame = CGRectMake(11.0f, lowestView.frame.origin.y + lowestView.frame.size.height + 2 * kTablePadding, tableWidth, tableHeight); 

    for (UIView *sv in self.subviews) { 
     // Move all Controls down 
     if ([sv isKindOfClass:[UIControl class]]) { 
      sv.frame = CGRectMake(sv.frame.origin.x, sv.frame.origin.y + tableExtHeight, sv.frame.size.width, sv.frame.size.height); 
     } 
    } 

} 

- (void)show{ 
    [self prepare]; 
    [self.tableView reloadData]; 
    [super show]; 
} 

- (void)prepare { 
    if (tableHeight == 0) { 
     tableHeight = 150.0f; 
    } 

    tableExtHeight = tableHeight + 2 * kTablePadding; 

    tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 0.0f, 0.0f) style:UITableViewStyleGrouped]; 
    tableView.delegate = tableDelegate; 
    tableView.dataSource = dataSource;  

    [self insertSubview:tableView atIndex:0]; 

    [self setNeedsLayout]; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return nil; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return 10; 
} 
- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
} 
- (void)dealloc { 
    [tableView release]; 
    [super dealloc]; 
} 
@end 

Now i want to load this tableView from data by calling reloadData in 'show' method but it is not calling delegate methods written in the class. 

Also, i am showing the code of other class from where i am showing the alert. 

- (void) showEsign{ 
    //IRPSaveRepairResponseDO *saveRepairDO = [[[[IRPSessionCache sharedInstance] currentSessionObject] dataModel] saveRepairDetails]; 
    IRPDataModel *dataModel = [[[IRPSessionCache sharedInstance] currentSessionObject] dataModel]; 
    IRPProductDetailsDO *prodDO = [dataModel productDetailsDO]; 
    //IRMLegalDocumentDO *legalDocDO = [dataModel legalDocDO]; 

    NSMutableArray *printLanguageArray = [prodDO languageOptionsDisplayArray]; 

    if ([printLanguageArray count] == 1) { 
     DLog(@"prodDO.defaultLanguageDescription: %@", prodDO.defaultLanguage); 
     [prodDO setUserSelectedLanguageForEsign:prodDO.defaultLanguage]; 
     UIAlertTableView *alert = [[UIAlertTableView alloc] initWithTitle:@"Select language" 
                    message:@"Concierge" 
                   delegate:self 
                 cancelButtonTitle:kCancel 
                 otherButtonTitles:kNext, nil]; 
     alert.tableDelegate = self; 
     alert.dataSource = self; 
     alert.tableHeight = 120;  
     [alert.tableView reloadData]; 
     [alert show]; 
    } 
} 

我想和一个阵列加载此的tableView。

+2

那么你在完成这个任务时面临什么样的问题。 – Robin 2011-02-18 08:25:59

回答

0

这使我的大脑受伤。

我不确定你在哪里初始化你的表格视图。也许它在你的UIAlertView子类之外。我的猜测是委托人/数据源不是主动设置的。您可能要添加的东西是这样的:

-(void) setTableView:(UITableView *)newTableView { 
    [tableView release]; 
    tableView = [newTableView retain]; 
    tableview.delegate = self; 
    tableView.dataSource = self; 
    } 

不过,话又说回来,我喝醉了,所以我很抱歉,如果我感到不理解。

相关问题