2016-07-14 160 views
2

我有一個集合視圖,這個集合中有3個部分:如何隱藏在集合視圖/取消隱藏部分

一個

Ç

然後我想隱藏B部分,那麼它將如下所示:

一個

Ç

我已經試過

collectionView.deleteSections(NSIndexSet(index: 1)) 

,但它崩潰並說:

終止應用程序由於未捕獲的異常 'NSInternalInconsistencyException',原因:'無效更新:無效 段數。更新(3)後 集合視圖中包含的部分數量必須等於更新(3)加上 之前收集視圖中包含的 部分的數量或減去插入或刪除的部分數量(0插入,1 已刪除)。'

+2

您應該從數據源中刪除部分,並通過調用'reloadData'重裝集合視圖。這將觸發'func numberOfSectionsInCollectionView(_ collectionView:UICollectionView) - > Int',你將返回更新的節數。 – fiks

+0

因爲我想重用它,那麼我只想隱藏/取消隱藏部分,所以在我的情況下刪除數據部分不會很好。 – Khuong

+0

如果您確實想要刪除@fiks所說的數據源,請嘗試將部分大小設置爲零? – childrenOurFuture

回答

3

如果您要求集合視圖更新自己添加/刪除節或單元格,您還必須更新您的委託方法才能返回正確的編號。

我寫在飛行中的一些代碼,把它作爲一個起點,理解的概念:

var sections = 3 
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
    return sections 
} 

func removeSectionOne() { 
    sections = 2 
    collectionView.deleteSections(NSIndexSet(index: 1)) 
    // At this point the collection view will ask again for the number of sections and it will be updated 
} 
+0

我想我需要有2個數組。一個原始數組和一個操作數組。 – Khuong

+0

什麼最適合你。事情是,你有兩件事要更新:1)視圖模型,告訴集合視圖添加/刪除部分/單元格和2)用於塑造集合視圖的數據模型。這兩件事必須是連貫的,所以如果你要求刪除一個部分,你的dataSource方法也應該少返回一個部分。 –

1

我已經做了與tableview中同樣的事情,

第一

BOOL sectionIsOpen[2]; // Your Sections number (3 in your case) 

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView  { 
     return self.arrMenu.count; 
    } 

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return ((sectionIsOpen[section]) ? [self numberOfRowsInSection:section] : 0); 
     } 

[self numberOfRowsInSection:section包含條款號

而且當你需要隱藏的方法和

for (NSInteger row = 0; row < [self numberOfRowsInSection:section]; row ++) { 
     [indxPths addObject: [NSIndexPath indexPathForRow:row inSection:section] 
     ]; 
    } 
    [self.tblMenu beginUpdates]; 
    if (open) { 
     [self.tblMenu insertRowsAtIndexPaths:indxPths withRowAnimation:UITableViewRowAnimationFade]; 
    }else{ 
     [self.tblMenu deleteRowsAtIndexPaths:indxPths withRowAnimation:UITableViewRowAnimationFade]; 

    } 
    sectionIsOpen[section] = open; 
    [self.tblMenu endUpdates]; 

希望它可以幫助通段.....