如何在tableView中加载数据

时间:2011-02-18 08:18:52

标签: iphone objective-c uitableview

您好我有以下代码,我试图在UIAlertView上添加UITableView,我已经在UIAlertTableView中为UIAlertView创建了子类。

#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。

1 个答案:

答案 0 :(得分:0)

这让我的大脑受伤。

我不确定你在哪里初始化你的桌面视图。也许它在您的UIAlertView子类之外。我的猜测是没有设置委托/数据源。您可能想要添加以下内容:

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

但是,再说一遍,我喝醉了,如果我不理解,我很抱歉。