2015-04-04 56 views
0

我有一個自定義單元格與6行tableView。viewWithTag:reloadData後返回零

自定義單元有一個UILabel和一個UISwitch。 在方法「的cellForRowAtIndexPath:」我有:

static NSString *CellIdentifier = @"optionsCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    UISwitch *optionsSwitch = (UISwitch *)[cell viewWithTag:300]; 
    UILabel *optionsLabel = (UILabel *) [cell viewWithTag:200]; 

    NSLog(@"%@", optionsSwitch); 
    NSLog(@"%@", optionsLabel); 

當的tableView第一次(從故事板)我正確地得到了兩個對象(我加入的結果只對表的第一行實例化視圖):

enter image description here

但是當我發送reloadData方法到的tableView(該UISwitch狀態可以通過編程方式改變,所以我更新顯示之前的實現代碼如下)我正確地得到的UILabel而UISwitch是零:

enter image description here

爲什麼UILabel的工作原理和UISwitch不是?

UISizeClasses未啓用,如另一篇文章中有關此問題的建議。

感謝,科拉多

回答

1

你改變開關其他地方的標籤代碼,可能是這樣,當開關被改變,你可以從它那裏得到的行號。

真的,你應該有一個自定義單元,它具有出口到視圖,所以你根本不需要使用標籤,單元應該處理交換機更改以更新模型或調用一些回調視圖控制器。

+0

其實我不會更改標籤:標籤只在基於indexPath.row的「cellForRowAtIndexPath:」中進行分配。出於測試目的,我甚至不改變UISwitch的狀態或其他任何東西......我只是重新加載tableview而不改變任何東西。 – Corrado 2015-04-04 14:50:34

+0

'該標籤只在「cellForRowAtIndexPath:」基於indexPath.row'分配 - 這正是問題,你不能這樣做,然後重新使用該單元... – Wain 2015-04-04 15:04:02

+0

你是對的,謝謝! – Corrado 2015-04-04 15:51:01