2013-04-01 19 views
0

在我的應用程序中,我使用了splitView。有3個不同的表格。無法保留錶行被選中

當我從第一個表中選擇任何一行時,詳細視圖&行中的顯示在左側菜單中仍保持選中狀態。但是,當我從第二個或第三個表中選擇任何一行時,該行只是用藍色突出顯示&快速消失選定的藍色(即它不保持突出顯示)。

幫我解決這個問題。

我的如下代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


    static NSString *[email protected]"CellIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

    if (cell == nil) { 

     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    if(tableView == tbl_class) 
    { 

     btnEdit1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [btnEdit1 setFrame:CGRectMake(220, 15, 20, 20)]; 
     [btnEdit1 addTarget:self action:@selector(btnEditPressed:) forControlEvents:UIControlEventTouchUpInside]; 

     [btnEdit1 setImage:[UIImage imageNamed:@"edit-3-black.png"]     forState:UIControlStateNormal]; 

     UIButton *btnDelete = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [btnDelete setFrame:CGRectMake(260, 15, 20, 20)]; 
     [btnDelete addTarget:self action:@selector(btnDelete:) forControlEvents:UIControlEventTouchUpInside]; 

     [btnDelete setImage:[UIImage imageNamed:@"recycle-bin2.png"]     forState:UIControlStateNormal]; 

     [btnEdit1 setTag:indexPath.row]; 
     [btnDelete setTag:indexPath.row]; 

     cell.textLabel.text=[NSString stringWithFormat:@"%@",[[classNames objectAtIndex:indexPath.row]valueForKey:@"class_name"]]; 

     if(! isEditing) 
     { 
      [cell.contentView addSubview:btnEdit1]; 
      [cell.contentView addSubview:btnDelete]; 
     } 



    } 
    if(tableView==tbl_assessment) 
    { 
     if (classNames.count > 0) 
     { 
      [btnAddAssesst setHidden:NO]; 
     } 
     else 
     { 
      [btnAddAssesst setHidden:YES]; 
     } 



     cell.textLabel.text=[NSString stringWithFormat:@"%@",[[assessment_list objectAtIndex:indexPath.row]valueForKey:@"assessment_name"]]; 

    } 

    if (tableView==tbl3) 
    { 

     cell.textLabel.text=[arr_result objectAtIndex:indexPath.row]; 

    } 

    cell.textLabel.font=[UIFont fontWithName:@"Trebuchet MS" size:17.0f]; 


    cell.textLabel.textColor=[UIColor grayColor]; 

    return cell; 
} 


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

    /* 
    When a row is selected, set the detail view controller's detail item to the item associated with the selected row. 
    */ 
    //NSUInteger row = indexPath.row; 

    if (aTableView==tbl_class) 
    { 
      [self.appDelegate.splitViewController viewWillDisappear:YES]; 
    NSMutableArray *viewControllerArray=[[NSMutableArray alloc] initWithArray:[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] viewControllers]]; 
    [viewControllerArray removeLastObject]; 


     self.secondDetailViewController=[[[Class_Vice_ViewController alloc]init]autorelease]; 
     [viewControllerArray addObject:self.secondDetailViewController]; 
     self.appDelegate.splitViewController.delegate = self.secondDetailViewController; 

     [[NSUserDefaults standardUserDefaults]setInteger:[[[classNames objectAtIndex:indexPath.row]valueForKey:@"class_id"]intValue] forKey:@"psel_class"]; 


     [self databaseOpen]; 
     assessment_list=[[NSMutableArray alloc]init]; 
     NSString *qq=[NSString stringWithFormat:@"select * from Assessment where class_id=%d",[[[classNames objectAtIndex:indexPath.row]valueForKey:@"class_id"]intValue]]; 
     assessment_list=[[database executeQuery:qq]mutableCopy]; 

     [database close]; 

     if (classNames.count > 0) 
     { 
      [btnAddAssesst setHidden:NO]; 
     } 
     else 
     { 
      [btnAddAssesst setHidden:YES]; 
     } 

     if (!assessment_list.count==0) { 
      [tbl_assessment setHidden:NO]; 
      [btnDelete setHidden:NO]; 
      [tbl_assessment reloadData]; 
     } 


    [[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] setViewControllers:viewControllerArray animated:NO]; 

    [self.appDelegate.splitViewController viewWillAppear:YES]; 

     [tbl_assessment reloadData]; 
    } 

    else if (aTableView==tbl_assessment) 
    { 
      [self.appDelegate.splitViewController viewWillDisappear:YES]; 
     NSMutableArray *viewControllerArray=[[NSMutableArray alloc] initWithArray:[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] viewControllers]]; 
     [viewControllerArray removeLastObject]; 

     self.thirdDetailViewController=[[[GameAssessment alloc]init]autorelease]; 
     [viewControllerArray addObject:self.thirdDetailViewController]; 
     self.appDelegate.splitViewController.delegate = self.thirdDetailViewController; 



     [[NSUserDefaults standardUserDefaults]setInteger:[[[assessment_list objectAtIndex:indexPath.row]valueForKey:@"assessment_id"]intValue] forKey:@"ASSESSMENT_ID"]; 


     [self databaseOpen]; 
     assessment_list=[[NSMutableArray alloc]init]; 
     NSString *qq=[NSString stringWithFormat:@"select * from Assessment where class_id=%d",[[NSUserDefaults standardUserDefaults]integerForKey:@"psel_class"]]; 
     assessment_list=[[database executeQuery:qq]mutableCopy]; 


     [database close]; 

     if (!assessment_list.count==0) { 
      [tbl_assessment setHidden:NO]; 

      [tbl_assessment reloadData]; 
     } 


     [[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] setViewControllers:viewControllerArray animated:NO]; 


     [self.appDelegate.splitViewController viewWillAppear:YES]; 

    } 

    else { 

     [self.appDelegate.splitViewController viewWillDisappear:YES]; 
     NSMutableArray *viewControllerArray=[[NSMutableArray alloc] initWithArray:[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] viewControllers]]; 
     [viewControllerArray removeLastObject]; 


     if (indexPath.row==0) { 
      self.fifthViewController=[[[ResultStudent_vice alloc]init]autorelease]; 
      [viewControllerArray addObject:self.fifthViewController]; 
      self.appDelegate.splitViewController.delegate = self.fifthViewController; 
     } 

     if (indexPath.row==1) { 
      self.fourthDetailViewController=[[[ResultClass_vice alloc]init]autorelease]; 
      [viewControllerArray addObject:self.fourthDetailViewController]; 
      self.appDelegate.splitViewController.delegate = self.fourthDetailViewController; 
     } 


     [[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] setViewControllers:viewControllerArray animated:NO]; 


     [self.appDelegate.splitViewController viewWillAppear:YES]; 

    } 

} 
+1

評論中didSelect取消 – Alex

+0

http://stackoverflow.com/questions/10527504/keeping-mastertableview-row-selected-in-splitviewcontroller – Ramz

+0

您可以發佈代碼的cellForRowAtIndexPath&DidSelect? –

回答

1

有兩件事情要做,以保持該行作爲選擇

  • - deselectRowAtIndexpath不應該出現在didselectRowAtIndexpath
  • 保持NSIndexpath的一個NSMutableArray存儲所選的值。當一行被選中時將其添加到數組中,並在-cellForRowAtIndexpath方法中檢查索引路徑是否存在於單元格中,如果有則使otherwi SE NO