2016-05-31 57 views
0

在我的cellForRowAtIndexPath和我預先選擇行:Objective-C的deselectRowAtIndexPath是有點兒工作

NSArray *tempArray = [[communityPrefs objectForKey:@"Community"] componentsSeparatedByString:@","]; 
NSMutableArray *tempArrayMutable = [[NSMutableArray alloc] initWithArray:tempArray]; 

if ([tempArrayMutable containsObject:cell.textLabel.text]) 
{ 
    [selectedAreaTable selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

} 

這部分的偉大工程。然而,選定的項目位於頁面的底部,用戶不會看到它,但是當它們向下滾動到該單元格時,它將被選中。

現在我試圖寫一段代碼的將取消像這樣所有選定單元:

for(NSIndexPath *index in selectedAreaTable.indexPathsForSelectedRows) 
     { 
      if(index.row != 0) 
      { 
       [selectedAreaTable deselectRowAtIndexPath:index animated:NO]; 
      } 
     } 

但在我運行此代碼仍然選擇在底部的細胞。所以我的問題是,爲什麼這個單元格不被取消選擇?是否因爲它不存在,直到你滾動到它?我該如何解決這個問題?

+1

您怎麼測試?什麼是索引路徑,當它不工作? 'indexPathsForSelectedRows'中有多少條索引路徑? – Wain

回答

0

是否因爲它不存在,直到您滾動到它?

是的。我相信你應該改變「選擇」狀態使用單元格對象只可見行。所有其他行應在cellForRowAtIndexPath方法

+1

選擇由表視圖跟蹤,因此'indexPathsForSelectedRows',而不是單元格。選擇只是由單元格顯示 – Wain

+0

我的意思是說,你只能在_visible_行上使用'indexPathsForSelectedRows'來處理選擇(抱歉,如果我的解釋很簡短)。對於尚未顯示的行(例如最後一行),您無法使用此方法接收indexPath。所以,你需要在'cellForRowAtIndexPath'中動態地關心它(因爲作者從開始使用它),總是執行實際的選擇狀態 –

0

user979331檢索「中選擇」狀態,

你沒有刪除在單獨的方法的選擇,而你也可以處理此在的cellForRowAtIndexPath爲好。

  1. 您可以聲明數組的NSMutableArray * tempArrayMutable作爲一個屬性,

  2. 當你想取消所有細胞讓我們假設一個明確的命名方法都選擇

    -(void)clearAllSelection { [self.tempArrayMutable removeAllObjects]; self.tableView reloadData]; }

  3. 最後在cellForRowAtIndexPath中更改爲

    if ([self.tempArrayMutable containsObject:cell.textLabel.text]) { [selectedAreaTable selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; } else{ [selectedAreaTable deselectRowAtIndexPath:indexPath animated:NO]; }