2012-04-25 86 views
9

這應該很簡單,但我遇到了麻煩。如何從故事板中創建的靜態UITableView中刪除單元格

我有一個單元格的靜態UITableView,我想以編程方式刪除,如果它不需要。

我有一個IBOutlet中它

IBOutlet UITableViewCell * cell15; 

而且我可以通過調用

cell15.hidden = true; 

這個隱藏它刪除,但保留其中的細胞曾經是一片空白,我可以」擺脫它。

也許黑客會改變它的高度爲0?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:indexPath 
{ 
//what would I put here? 
} 

非常感謝!

+1

'tableView:deleteRowAtIndexPath:'? 沒有自己嘗試,只是一個快速的方法來試試 – anticyclope 2012-04-25 06:13:59

+0

謝謝!我將如何去選擇我想要刪除的行? – dot 2012-04-25 06:23:15

+0

[如何從StoryBoard中設計的UITableView中移除靜態單元格]的可能重複(https://stackoverflow.com/questions/8262270/how-to-remove-a-static-cell-from-a-uitableview-designed故事板) – 2017-06-18 23:54:48

回答

12

在數據源中不能真正處理這個問題,因爲使用靜態表您甚至不實現數據源方法。高度是要走的路。

試試這個:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (cell == cell15 && cell15ShouldBeHidden) //BOOL saying cell should be hidden 
     return 0.0; 
    else 
     return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 

更新

看來,在自動佈局,這可能不是最好的解決辦法。有一個替代的答案here這可能有所幫助。

+0

在這種情況下,我得到了一個'BAD_ACCESS'。 TableView不會詢問單元格的高度_before_實例化嗎? – Besi 2012-07-23 09:33:27

+0

它以前會詢問(在這種情況下,單元格將爲零,並且會落入超級單元格中),而且在滾動期間,我認爲,我不知道如何通過此代碼獲得不良訪問權限。你應該發佈一個新的問題,並附上這個答案的鏈接。 – jrturton 2012-07-23 09:40:49

+5

我也遇到了由某種無限循環引起的'BAD_ACCESS'。我通過不比較單元格來修正它,但索引路徑是這樣的:'if(indexPath.row == 3 && cellShouldBeHidden)' – codingFriend1 2013-07-17 10:00:52

3

根據您的表應該如何工作,在您的數據源中,您可以實現tableView:numberOfRowsInSection:以基於必要的邏輯返回該行的0行。

更新的評論:

的部分參數將iOS的填充,當你實現被稱爲因此,所有你需要的是一個開關來處理具有您螞蟻刪除/隱藏該行的部分。示例如下:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    switch(section) { 
     case 0: // first section of your table, change for your situation 
      return 0; 
     default: 
      return 0; 
    } 
} 
+0

如何選擇代碼中的部分?這是我真正遇到的問題... – dot 2012-04-25 06:23:24

+0

這會在兩個相鄰(非隱藏)部分之間留下太大的間隙,儘管... – Drux 2013-08-24 19:26:21

6

您可以使用tableView:willDisplayCelltableView:heightForRowAtIndexPath,其小區標識顯示/隱藏靜態tableview細胞,但溜溜必須實現heightForRowAtIndexPathsuper,不self。這兩種方法的工作對我罰款:

(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if ([cell.reuseIdentifier.description isEqualToString:@"cellCelda1"]) { 
    [cell setHidden:YES]; 
    } 
} 

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 
    if ([cell.reuseIdentifier.description isEqualToString:@"cellCelda1"]) { 
     return 0; 
} 
    return cell.frame.size.height; 
} 
+0

作品完美! – mikemike396 2013-06-11 19:39:33

0

它唯一不變的細胞

-(void)tableViewSearchPeopleCellHide:(BOOL)hide{ 

    searchCellShouldBeHidden=hide; 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]]; 
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
    cell.hidden=hide; 
    self.searchPeople.hidden=hide;//UILabel 
    [self.tableView reloadData]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (searchCellShouldBeHidden) //BOOL saying cell should be hidden 
     return 0.0; 
    else 
     return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 
0

你可以做的第一件事是標籤從故事板,你想要的細胞隱藏。 把一些你可以識別的標準號碼。

添加此代碼。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 
    if (cell.tag==10) { //I have put 10 for some static cell.  
       cell.hidden=YES; 
       return 0;   

    } 
    cell.hidden = NO; 
    return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 
0

設置要隱藏隱藏在代碼中某處的單元格。添加此代碼:(如果您的單元格具有不同的行高度,則需要覆蓋更多功能)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    int rowCount=0; 
    for (int row=0; row<[super tableView:tableView numberOfRowsInSection:section]; ++row){ 
     NSIndexPath* path=[NSIndexPath indexPathForRow:row inSection:section]; 
     UITableViewCell* cell=[super tableView:tableView cellForRowAtIndexPath:path]; 
     if (!cell.hidden){ 
      ++rowCount; 
     } 
    } 
    return rowCount; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    int realRow=-1; 
    for (int row=0; row<[super tableView:tableView numberOfRowsInSection:indexPath.section]; ++row){ 
     NSIndexPath* path=[NSIndexPath indexPathForRow:row inSection:indexPath.section]; 
     UITableViewCell* cell=[super tableView:tableView cellForRowAtIndexPath:path]; 
     if (!cell.hidden){ 
      ++realRow; 
     } 
     if (realRow==indexPath.row) 
      return cell; 
    } 
    return nil; 
} 
相關問題