在执行UItableView委托/数据源方法之前“在控制台中显示”之前没有重复使用表格单元的索引路径“消息

时间:2014-04-10 11:29:19

标签: ios uitableview

我正在开发一个应用程序,我正在使用以编程方式添加的UITableView 查看如下,

//creating tableview1
    tableView1=[[UITableView alloc]initWithFrame:CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y,self.view.frame.size.width,heightOfTable1)];
    tableView1.scrollEnabled=NO;
    tableView1.dataSource=self;
    tableView1.separatorStyle=UITableViewCellSeparatorStyleNone;
    [self.view addSubview:tableView1];

以下是我的cellForRowAtIndexPath方法

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentifier=@"CustomHiddenViewCell";
    CustomHiddenViewCell *cell = (CustomHiddenViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomHiddenViewCell" owner:self options:nil];

        cell = [nib objectAtIndex:0];

    }

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    cell.greetingLabel.hidden=YES;
    cell.detailViewButton.hidden=YES;
    cell.separatorView.hidden=YES;
    cell.accessoryType=UITableViewCellAccessoryNone;

    if (tableView==tableView1) {
        [[cell viewWithTag:101] removeFromSuperview];
        [[cell viewWithTag:102] removeFromSuperview];
        [[cell viewWithTag:103] removeFromSuperview];
        [[cell viewWithTag:104] removeFromSuperview];
        [[cell viewWithTag:105] removeFromSuperview];
        [[cell viewWithTag:106] removeFromSuperview];
        [[cell viewWithTag:107] removeFromSuperview];
        [[cell viewWithTag:108] removeFromSuperview];
        [[cell viewWithTag:109] removeFromSuperview];


        if (initialViewFlag==1) {
            if (indexPath.row==0) {
                UIImageView *logoImageView=[[UIImageView alloc]initWithFrame:CGRectMake(cell.frame.size.width/2-60, 5, 120,50)];
                logoImageView.image=[self convertImage];
                [logoImageView setTag:101];
                [cell.contentView addSubview:logoImageView];
                [cell.contentView bringSubviewToFront:logoImageView];
            }
            else if (indexPath.row==1) {
                [cell.detailViewButton addTarget:self action:@selector(exploreViewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

                UIButton *backButton=[[UIButton alloc]initWithFrame:CGRectMake(cell.frame.origin.x+20,10,70,40)];
                [backButton setTitle:@"Back" forState:UIControlStateNormal];
                [backButton setTag:102];
                [backButton setBackgroundColor:[UIColor clearColor]];
                [cell.contentView addSubview:backButton];
                [cell bringSubviewToFront:backButton];

                UIButton *homeButton=[[UIButton alloc]initWithFrame:CGRectMake(cell.detailViewButton.frame.origin.x+cell.detailViewButton.frame.size.width+58,10,70,40)];
                [homeButton setTitle:@"Home" forState:UIControlStateNormal];
                [homeButton setTag:103];
                [homeButton setBackgroundColor:[UIColor clearColor]];
                [cell.contentView addSubview:homeButton];
                [cell bringSubviewToFront:homeButton];
            }
            else if (indexPath.row==2){
                UILabel *cellLabel=[[UILabel alloc]initWithFrame:CGRectMake(10,0,cell.frame.size.width,cell.frame.size.height/2)];
                [cellLabel setText:@"Personal Details"];
                [cellLabel setTag:104];
                [cell.contentView addSubview:cellLabel];
            }
        }
        else if(initialViewFlag==2){
            if (indexPath.row==0) {
                UIImageView *logoImageView=[[UIImageView alloc]initWithFrame:CGRectMake(cell.frame.size.width/2-60, 5,120,50)];
                logoImageView.image=[self convertImage];
                [logoImageView setTag:201];
                [cell.contentView addSubview:logoImageView];
            }
            else if (indexPath.row==1) {
                cell.greetingLabel.hidden=YES;
                cell.detailViewButton.hidden=YES;
                UIButton *phoneButton=[[UIButton alloc]initWithFrame:CGRectMake(cell.frame.origin.x+5,cell.frame.origin.y+2,70,cell.frame.size.height-4)];
                [phoneButton setTitle:@"Phone" forState:UIControlStateNormal];
                [phoneButton setTag:202];
                [cell.contentView addSubview:phoneButton];


                UIButton *emailButton=[[UIButton alloc]initWithFrame:CGRectMake(phoneButton.frame.origin.x+phoneButton.frame.size.width+10,cell.frame.origin.y+2,70,cell.frame.size.height-4)];
                [emailButton setTitle:@"Email" forState:UIControlStateNormal];
                [emailButton setTag:203];
                [cell.contentView addSubview:emailButton];
                [cell bringSubviewToFront:emailButton];

                UIButton *aboutInfoButton=[[UIButton alloc]initWithFrame:CGRectMake(emailButton.frame.origin.x+emailButton.frame.size.width+10,cell.frame.origin.y+2,70,cell.frame.size.height-4)];
                [aboutInfoButton setTitle:@"About" forState:UIControlStateNormal];
                [aboutInfoButton setTag:204];
                [cell.contentView addSubview:aboutInfoButton];
                [cell bringSubviewToFront:aboutInfoButton];

                UIButton *logoutButton=[[UIButton alloc]initWithFrame:CGRectMake(aboutInfoButton.frame.origin.x+aboutInfoButton.frame.size.width+10,cell.frame.origin.y+2,70,cell.frame.size.height-4)];
                [logoutButton setTitle:@"Logout" forState:UIControlStateNormal];
                [logoutButton setTag:205];
                [cell.contentView addSubview:logoutButton];
                [cell bringSubviewToFront:logoutButton];

            }
            else if (indexPath.row==2) {
                cell.detailViewButton.hidden=NO;
                [cell.detailViewButton addTarget:self action:@selector(exploreViewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
            }
            else if (indexPath.row==3) {

                cell.detailViewButton.hidden =NO;
                [cell.detailViewButton addTarget:self action:@selector(exploreViewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

                UIButton *backButton=[[UIButton alloc]initWithFrame:CGRectMake(cell.frame.origin.x+20,10,70,40)];
                [backButton setTitle:@"Back" forState:UIControlStateNormal];
                [backButton setTag:206];
                [cell.contentView addSubview:backButton];
                [cell bringSubviewToFront:backButton];

                UIButton *homeButton=[[UIButton alloc]initWithFrame:CGRectMake(cell.detailViewButton.frame.origin.x+cell.detailViewButton.frame.size.width+58,10,70,40)];
                [homeButton setTitle:@"Home" forState:UIControlStateNormal];
                [homeButton setTag:207];
                [homeButton setBackgroundColor:[UIColor clearColor]];
                [cell.contentView addSubview:homeButton];
                [cell bringSubviewToFront:homeButton];
            }
            else if (indexPath.row==4){
                UILabel *cellLabel=[[UILabel alloc]initWithFrame:CGRectMake(10,0,cell.frame.size.width/2,cell.frame.size.height/2)];
                [cellLabel setText:@"Personal Details"];
                [cellLabel setTag:208];
                cellLabel.backgroundColor=[UIColor clearColor];
                [cell.contentView addSubview:cellLabel];
                [cell bringSubviewToFront:cellLabel];

            }
        }
        else if (initialViewFlag==3){

            if (indexPath.row==0) {

                cell.detailViewButton.hidden =NO;
                [cell.detailViewButton addTarget:self action:@selector(exploreViewButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

                UIButton *backButton=[[UIButton alloc]initWithFrame:CGRectMake(cell.frame.origin.x+20,10,70,40)];
                [backButton setTitle:@"Back" forState:UIControlStateNormal];
                [backButton setTag:301];
                [backButton setBackgroundColor:[UIColor clearColor]];
                [cell.contentView addSubview:backButton];
                [cell bringSubviewToFront:backButton];

                UIButton *homeButton=[[UIButton alloc]initWithFrame:CGRectMake(cell.detailViewButton.frame.origin.x+cell.detailViewButton.frame.size.width+58,10,70,40)];
                [homeButton setTitle:@"Home" forState:UIControlStateNormal];
                [homeButton setTag:302];
                [homeButton setBackgroundColor:[UIColor clearColor]];
                [cell.contentView addSubview:homeButton];
                [cell bringSubviewToFront:homeButton];
            }
            else if (indexPath.row==1){
                UILabel *cellLabel=[[UILabel alloc]initWithFrame:CGRectMake(10,0,cell.frame.size.width/2,cell.frame.size.height/2)];
                [cellLabel setText:@"Personal Details"];
                [cellLabel setTag:303];
                cellLabel.backgroundColor=[UIColor clearColor];
                [cell.contentView addSubview:cellLabel];
                [cell bringSubviewToFront:cellLabel];

            }
        }
    }
    return cell;
}




//numberOfSectionsInTableView method

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (tableView==accountStatementUpperTableView) {
        if (initialViewFlag==1) {
            return 3;
        }
        else if(initialViewFlag==2){
            return 5;
        }
        else if (initialViewFlag==3){
            return 2;
        }
    }
    return 0;
}


//heightForRowAtIndexPath method
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentifier=@"CustomHiddenViewCell";
    CustomHiddenViewCell *cell = (CustomHiddenViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomHiddenViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
    if (tableView==accountStatementUpperTableView) {
        [accountStatementUpperTableView beginUpdates];
        [accountStatementUpperTableView endUpdates];
        if (initialViewFlag==1) {
            if (indexPath.row==0 || indexPath.row==1) {
                return cell.frame.size.height;
            }
            else if (indexPath.row==2){
                return cell.frame.size.height/2;
            }
        }
        else if (initialViewFlag==2) {
            if (indexPath.row==0 || indexPath.row==1 || indexPath.row==3) {
                return cell.frame.size.height;
            }
            else if(indexPath.row==2){
                return cell.detailViewButton.frame.size.height;
            }
            else if(indexPath.row==4){
                double heightOfCell=(cell.frame.size.height/2);
                return heightOfCell;
            }
        }
        else if (initialViewFlag==3){
            if (indexPath.row==0) {
                return cell.frame.size.height;
            }
            else if (indexPath.row==1){
                return cell.frame.size.height/2;
            }
        }

    }
    return cell.frame.size.height;
}
#pragma mark -

当我运行我的应用程序时,它给了我"没有索引路径表格单元格被重用之前"控制台中的消息。当我尝试使用调试器运行它时,我发现首先显示此消息,然后它开始执行UItableView的委托和数据源方法。

我还尝试在删除所有重新加载,开始更新和结束更新语句后运行但仍然收到此消息。并且在重新加载或更新语句期间不显示此消息,它仅在加载

之前显示

任何人都可以告诉我为什么会这样吗?我的代码有什么问题吗? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

得到了解决方案。 我收到此消息只是因为我正在重新加载早期视图控制器的presentViewController的完成块中的tableview,同时呈现另一个视图控制器。

通过从presentViewController的完成块中删除reload语句来解决此问题