2011-02-18 148 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; 
    } 

不過,話又說回來,我喝醉了,所以我很抱歉,如果我感到不理解。

相關問題