didselectrowatindexpath没有被称为

时间:2013-02-19 04:39:25

标签: ios

我遇到的问题是没有调用didselectrowatindexpath。 我的tableview在viewdidload中设置如下:

- (void)viewDidLoad
{
    //[super viewDidLoad];

    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.tableView reloadData];
    self.detailViewController = (klViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];

}

现在我的cellForRowAtIndexPath被调用,我正在重复使用单元格如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"menuSelection1";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }


    AmbassadorInfoData * data = [self.LoadMenuItems objectAtIndex:indexPath.row];
    cell.textLabel.text = data.treeName;

    return cell;
}

我已经检查了其他答案,并且大多数人说可能会使用didDeselectRowAtIndexPath。但这不是这种情况。 现在我的问题是在我的拆分视图控制器中,每当我选择任何选项时,相应的详细信息视图都不会显示并且为空白。我没有调用rootview控制器(klViewController)中的任何方法。这可能是什么原因? 以下是与UITableView相关的所有方法。它与viewDidLoad

中的同一个类实现
#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    // Return the number of rows in the section.
    return [self.LoadMenuItems count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"menuSelection1";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }


    AmbassadorInfoData * data = [self.LoadMenuItems objectAtIndex:indexPath.row];
    cell.textLabel.text = data.treeName;

    return cell;
}

-(NSArray *)LoadMenuItems
{


    NSMutableArray * menuData =  [[NSMutableArray alloc] initWithCapacity:5];
    AmbassadorInfoData * data = [[AmbassadorInfoData alloc] init];

    data.treeName = @"Ambassador Info";
    data.treeDescription = @"This is temp data.";
    NSString * file = [[NSBundle mainBundle] pathForResource:@"oak" ofType:@"jpg"];
    data.treePhoto = [UIImage imageWithContentsOfFile:file];

    [menuData addObject:data];
    data=nil;

    data = [[AmbassadorInfoData alloc] init];
    data.treeName = @"AmbassadorInternalList";
    data.treeDescription = @"This is temp data.).";
    file = [[NSBundle mainBundle] pathForResource:@"DouglasFir" ofType:@"jpg"];
    data.treePhoto = [UIImage imageWithContentsOfFile:file];
    [menuData addObject:data];
    data=nil;

    data = [[AmbassadorInfoData alloc] init];
    data.treeName = @"Text 3";
    data.treeDescription = @"This is temp data.";
    file = [[NSBundle mainBundle] pathForResource:@"SugarMaple" ofType:@"jpg"];
    data.treePhoto = [UIImage imageWithContentsOfFile:file];
    [menuData addObject:data];
    data=nil;

    data = [[AmbassadorInfoData alloc] init];
    data.treeName = @"Text 4";
    data.treeDescription = @"This is temp data.";
    file = [[NSBundle mainBundle] pathForResource:@"RedMaple" ofType:@"jpg"];
    data.treePhoto = [UIImage imageWithContentsOfFile:file];
    [menuData addObject:data];
    data=nil;

    data = [[AmbassadorInfoData alloc] init];
    data.treeName = @"Text 5";
    data.treeDescription = @"This is temp data.";
    file = [[NSBundle mainBundle] pathForResource:@"Pine" ofType:@"jpg"];
    data.treePhoto = [UIImage imageWithContentsOfFile:file];
    [menuData addObject:data];
    menuItems = [[NSArray alloc] initWithArray:(NSArray *)menuData];
    data=nil;

    return menuItems;


}




#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    AmbassadorInfoData * selectedItem =(AmbassadorInfoData *)[self.menuItems objectAtIndex:[self.tableView indexPathForSelectedRow].row];


    detailObject = selectedItem;

    [detailViewController setDetailItem:detailObject];


}

@end

2 个答案:

答案 0 :(得分:0)

尝试以下修改:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSLog(@"TableView methods are called! problem is getting AmbassadorInfoData object") 

    AmbassadorInfoData * selectedItem =(AmbassadorInfoData *)[self.menuItems objectAtIndex:indexPath.row];

    if (!selectedItem) NSLog(@"Unable to get Ambassador object, check your menuItems");

    [self.detailViewController setDetailItem:selectedItem];   //notice "self."


}

同样,取消注释[super viewDidLoad];

编辑:

看来你正在使用你不理解的代码,在这种情况下我建议学习一些基础知识....这里有一个great site,帮助我理解了很多次

这是Apple的指南:Table View Programming Guide

答案 1 :(得分:0)

由于您使用LoadMenuItems的方式,可能是您的程序停留在长时间运行的操作中。每次调用numberOfRowsInSection和cellForRowAtIndexPath时,都会重新创建整个数组 - 这很糟糕。您应该在viewDidLoad中调用LoadMenuItems一次,并且在创建该数组后,使用它,而不是在需要获取数据时调用LoadMenuItems。我不知道这是不是导致你出现问题的原因,但是你一定要修好它,看看它是否有所作为。