我正在開發一個應用程序使用Xcode 4.6.1> iOS 5.0版本。UITableView怪異行爲
該應用程序僅顯示從服務器端獲取的調查問卷,保存在數據庫中並允許其用戶填寫。
要顯示問題,我有UIScrollView
,我正在使用pagingEnabled模式。我有三種問題選擇類型,分別是checkbox
,radio button
和textfield
。對於UI控件,我創建了CheckBoxButton
和RadioButton
類,它們只是從UIButton
繼承而來。我通過更改背景圖像來設置選擇屬性。因此,每個頁面都包含一個問題,根據選擇數量包含checkboxes | radio buttons
。如果選項數爲4,則顯示4個複選框。
如果問題和選擇不適合頁面,我創建一個UITableView
,我將它作爲子視圖添加到UIScrollView
。而不是使用UITableView
,我試圖使用UIScrollView
,但它讓事情變得更糟。所以,這不是一個真正的選擇。要創建UITableViewCell
,我使用此代碼。
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone ;
}
QuestionChoice *currentChoice = [[[[_questionArray objectAtIndex:currentQuestionIndex] choices] allObjects ] objectAtIndex:indexPath.row -1 ];
CheckBoxButton *checkBox = [[CheckBoxButton alloc] initWithXValue:20 yValue:0 tag:0];
[cell addSubview:checkBox];
UIFont *aeroSmall = [UIFont fontWithName:@"Aero" size:22.0f];
NSString *choiceText = currentChoice.choiceText;
CRTLabel *choiceLabel = [[CRTLabel alloc] initWithFrame:CGRectMake(80, 0, 700, 44) andText:choiceText font:aeroSmall tag:0];
[cell addSubview:choiceLabel];
我知道如果一個單元格不在屏幕上,它不存在。我的問題是與此。假設我已經選中了第四個複選框並向上滾動,所以第四個單元格不再顯示。當我向下滾動時,第四個單元格將通過使用上述代碼進行重新創建。我的問題是它是以舊狀態創建的。這意味着當我檢查之前向上滾動,它被檢查重新創建。
這怎麼可能?我錯過了什麼?我沒有使用任何緩存機制。
如果未取消分配,假設第0節中的第四個單元格不顯示,爲什麼我在cellForAtIndexPath方法後得到零,這是否正常? – limon
我不清楚評論中的問題。什麼值'nil'什麼時候? – vacawama
比方說,第四個單元格不在屏幕上,當我使用self.tableView cellForAtIndexPath:indexPath,對於第0和第4行,我得到零。但是,你說過屏幕外的單元沒有被釋放。 – limon