2012-12-07 81 views
1

感謝您的幫助。 我有一個自定義單元格,使用下面的代碼進行展開。但是,第一個單元格(索引0)總是在ViewControllers啓動時擴展?iOS自定義單元格可擴展 - 索引0問題

我錯過了什麼?你如何在啓動時將它們全部展開並僅在選擇時展開。

很多謝謝。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     CustomCellCell *cell; 
     static NSString *[email protected]"myCustomCell"; 
     cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

     if (cell == nil) 
     { 
      NSArray *test = [[NSBundle mainBundle]loadNibNamed:@"myCustomCell" owner:nil options:nil]; 
      if([test count]>0) 
      { 
       for(id someObject in test) 
       { 
        if ([someObject isKindOfClass:[CustomCellCell class]]) { 
         cell=someObject; 
         break; 
        } 
       } 
      } 
     } 

     cell.LableCell.text = [testArray objectAtIndex:[indexPath row]]; 
     NSLog(@"data testarray table %@", [testArray objectAtIndex:[indexPath row]]); 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     return cell; 
    } 

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     self.selectedRow = indexPath.row; 
     CustomCellCell *cell = (CustomCellCell *)[tableView cellForRowAtIndexPath:indexPath]; 

     [tableView beginUpdates]; 
     [tableView endUpdates]; 

     cell.buttonCell.hidden = NO; 
     cell.textLabel.hidden = NO; 
     cell.textfiledCell.hidden = NO; 
     cell.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
     cell.clipsToBounds = YES; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
     if(selectedRow == indexPath.row) { 
      return 175; 
     } 

     return 44; 
    } 

回答

1

這是因爲默認值selectedRow爲零。您需要將其初始化爲:

selectedRow = NSIntegerMax; //or selectedRow = -1; 

或其他一些默認值。您可以在viewDidLoad方法左右添加此項。每當你聲明一個int型變量時,它的默認值是零。所以如果你有一個場景,例如在上面的例子中需要檢查零,你應該默認它不會被使用的值。負值或NSIntegerMax可以用於此。

+0

我覺得自己像一個ideeoat ....感謝您的幫助。 – AhabLives

+0

@AhabLives,不是問題。通常人們往往會錯過這一點。請接受,如果這有幫助。 :) – iDev

+1

我試過......告訴我等10分鐘.....所以我等着......再看看 – AhabLives

0

我猜selectedRow是一個整數實例變量。該整數的起始值爲0.由於第一個表格單元格是第0行,即使您沒有故意設置它,它仍與selectedRow匹配。

解決此問題的一種方法是將selectedRow存儲爲NSIndexPath而不是整數。

然後,你可能只是這樣做:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if([selectedRow isEqual:indexPath]) { 
     return 175; 
    } 
    return 44; 
} 

而且由於selectedRow將默認爲零,你不會得到一個錯誤的比賽。如果您稍後決定使用部分,它也更加靈活。

相關問題