2016-01-29 90 views
1

UITableViewDataSource方法,我檢查,看看是否我有數據:DeqeueReusableCellWithIdentifier重疊兩個小區

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (data.count == 0) 
    { 
     return 1; //This one cell will be of type NoDataTypeCell 
    } else { 
     return data.count //These cells will be of type DataTypeCell 
    } 
} 
cellForRowAtIndexPath

所以檢查要使用哪種類型的細胞,以同樣的方式:

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

    SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath]; 

    if (data.count == 0) 
    { 
     NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier]; 
     //Setup the noDataCell 
     return cellNoData; 

    } else { 
     return dataCell; 
    } 
} 

這會導致我從未見過的東西。正如所料,我的控制器加載的數據是空的。結果,1個NODataTypeCell被出隊。

數據進來後,TableView被重新加載。

numberOfRowsInSection回報data.count

cellForRowAtIndexPath不返回noDataCell,它返回data.countdataCells

除了我的tableView仍然有noDataCell。最奇怪的部分?它直接在tableView的第一個單元格上。單元格是不可選的,並且使單元格不可選。它沒有數據,因爲它尚未設置。但它在那裏,它不會消失。

我在做什麼錯?

這裏是單元格後面的視圖調試器透視圖。你可以清楚地看到,有兩個單元的第一行,只有一個在第二行單元格 enter image description here

+0

您是否嘗試將SAFindSuggestedTableViewCell的出列轉移到else子句?因爲即使你沒有返回要呈現的dataCell,看起來好像出列進程並沒有處理好更好的出列。 – CStreel

+0

@CStreel這是當我按照你的建議時拋出的錯誤:由於未捕獲的異常'NSInvalidArgumentException',原因:' - [_ UITableViewReorderingSupport _needsSetup]:無法識別的選擇器發送到實例0x148b4b6d0' – YichenBman

回答

2

tableView dequeueReusableCellWithIdentifier:會返回一個對象cell並添加到tableView

在上面的代碼:

SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath]; 

if (data.count == 0) 
{ 
    NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier]; 

如果data = 0。兩個單元格已經添加到tableView的相同索引路徑。所以這是錯誤的原因。

你應該分開你的代碼中indexPath返回精確的一個單元,如:

if (data.count == 0) 
{ 
    NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier]; 
    //Setup the noDataCell 
    return cellNoData; 

} else { 
    SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath]; 
    return dataCell; 
} 

我看到你關於崩潰評論。我認爲這是因爲你的邏輯與你真實的代碼。

+0

是的,你知道了。問題與邏輯,這是需要發生的事情 – YichenBman