您好我有以下代码,我试图在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。
答案 0 :(得分:0)
这让我的大脑受伤。
我不确定你在哪里初始化你的桌面视图。也许它在您的UIAlertView子类之外。我的猜测是没有设置委托/数据源。您可能想要添加以下内容:
-(void) setTableView:(UITableView *)newTableView {
[tableView release];
tableView = [newTableView retain];
tableview.delegate = self;
tableView.dataSource = self;
}
但是,再说一遍,我喝醉了,如果我不理解,我很抱歉。