2011-06-21 196 views
0

當您滑動tableview和單元格被隱藏或刪除時,是否有任何方法在UITableView中使用tableviewcell。我有這樣的代碼:UITableViewCell單元格不顯示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    int curIndex = 0; 

    for (int i = 0; i < [dataHolder.dateArray count]; i++) 
    { 
     if ([[dataHolder.dateArray objectAtIndex:i] isEqual:[dataHolder.allDates objectAtIndex:[indexPath section]]]) 
     { 
      if ([self indexHasContains:i] == NO) 
      { 
       curIndex = i; 
       [indexHasChossen addObject:[NSString stringWithFormat:@"%i", i]]; 
       break; 
      } 
     } 
    } 

    cell.selectionStyle = UITableViewCellSelectionStyleGray; 
    cell.textLabel.text = [NSString stringWithFormat:@"%@, %@", [dataHolder.courseArray objectAtIndex:curIndex], [dataHolder.placeArray objectAtIndex:curIndex]]; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", [dataHolder.timeArray objectAtIndex:curIndex]]; 
    cell.selectionStyle = UITableViewCellSelectionStyleGray; 
    cell.textLabel.textColor = [UIColor blackColor]; 
    cell.detailTextLabel.textColor = [UIColor whiteColor]; 

    return cell; 
} 

我也希望從indexHasChossen陣列當細胞被隱藏/刪除delets的方法。我瀏覽了蘋果文檔,還沒有找到任何東西。做任何人都知道任何方式來做到這一點?

回答

0

如果您想要隱藏或刪除單元格,tableView:cellForRowAtIndexPath:如何不重要。表格視圖只有在知道單元格存在時才調用該方法。這取決於您在方法numberOfSectionsInTableView:tableView:numberOfRowsInSection:方法中返回的內容。大多數時候前者返回1,所以如果你想消除整個部分比你應該有某種標記,如sectionHidden這是布爾值指示部分是否隱藏。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    if (sectionHidden) 
     return 0; 
    else 
     return 1; 
} 

何地,你要開始刪除操作做這樣的事,

sectionHidden = YES; 
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] 
       withRowAnimation:UITableViewRowAnimationFade]; 

,並翻轉回做sectionHidden = NO並調用reloadSections:withRowAnimation:

同樣的事情適用於行,您必須更改tableView:numberOfRowsInSection:方法以反映您已刪除行或隱藏行。這次您必須使用reloadRowsAtIndexPaths:withRowAnimation:而不是reloadSections:withRowAnimation:方法。

0

雖然有「隱性」 tableViewCells,用戶刪除的細胞被報道的tableView沒有一個標準的概念:commitEditingStyle:forRowAtIndexPath:

但讓我再補充一點,你似乎在的cellForRowAtIndexPath被跟蹤「hasChosen」。此方法僅意味着單元即將出現在屏幕上,而不是它已被選中。當你的委託被調用tableView時發生「選擇」:didSelectRowAtIndexPath:

編輯:啊,也許通過「隱藏」,你的意思是它已經離開了屏幕。不,我不相信有這樣的一個呼叫,(儘管你可以欺騙一下,看看你得到的任何出隊的細胞,因爲那些細胞以前是在屏幕上,現在可用)。

0

從uitableview中刪除單元格非常簡單。我建議看看蘋果開發者文檔中的iPhoneCoreDataRecipes項目。

您將不得不添加一個名爲commitEditingStyle的函數到您的UITableViewDelegate,並添加編輯按鈕(UITableViewController中的self.editButtonItem)以允許編輯模式。

// Override to support editing the table view. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
    // Delete the object for the given index path 
    } 
}