2012-01-27 13 views
0

我不確定我是否正確地解答了我的問題,所以這裏是詳細信息。 我正在使用UITableView來顯示可用字體的列表。列表被dsiplayed時, 一次只顯示大約12行,因此如果先前選擇的字體尚未顯示,則在首次顯示視圖時無法選擇它。如何選擇尚未顯示的UITableView行?

我希望在出現視圖時讓單元格選中並顯示在列表中央。但是,由於根據需要只的UITableView加載數據,這是最好的,我可以得到:

EDITED 我已經試過,但它不工作(細胞只簡單地選擇同時滾動):

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     static NSString *CellIdentifier = @"Cell"; 
     UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if(cell==nil){ 
      cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     } 
     [cell.textLabel setText:[fontArray objectAtIndex:indexPath.row]]; 
     [cell.textLabel setFont:[UIFont fontWithName:[fontArray objectAtIndex:indexPath.row] size:16]]; 
     [cell setSelectionStyle:UITableViewCellSelectionStyleBlue]; 
//select the cell/row if it matches the current font 
     if([cell.textLabel.text isEqualToString:currentFontName]){ 
      cell.selected=YES; 
     } 
     NSLog(@"returning cell %@",cell.textLabel); 
     return cell; 
    } 

回答

0

我在另一個線程中找到了解決方案 - 問題與重用單元有關。如果我不重複使用細胞,那麼一切正常。重複使用單元格也會導致出現多個選中標記時出現問題的問題。感謝那些貢獻。

編輯:如果我不應該回答我自己的問題,請告訴我......但也告訴我解決問題的正確方法!

編輯2:此線程也有助於 UITableViewCell going black when selected programmatically

+0

FWIW,不重複使用單元格是創建滾動可怕表格的好方法。這聽起來像是細胞重新使用時,錯誤並未重置細胞狀態。 – smparkes 2012-02-25 19:33:27

0

這可能是正確的方法,但不能通過指針比較測試NSString的相等性。你想要- (BOOL)isEqualToString:(NSString *)aString而不是==

+0

的isEqualToString部分作品(顯示我缺乏Ç知識),但同時滾動單元不保持選定。當它首次出現時就會被選中,然後取消選擇。我編輯了我的帖子,以更準確地反映我的問題。謝謝。 – wayneh 2012-01-27 21:29:49

+0

啊。我想你想要 - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated'。 – smparkes 2012-01-27 21:37:35

+0

這應該將表格放在所需的行的中心。我不確定'取消選擇'的部分。它不應該失去我可以看到的選定狀態... – smparkes 2012-01-27 21:39:41

1

1 - 請使用- (BOOL)isEqualToString:(NSString *)aString

1A的比較 - 更換您的測試

if([cell.textLabel.text isEqualToString:currentFontName]){ 
    cell.selected=YES; 
} 

通過

cell.selected = [cell.textLabel.text isEqualToString:currentFontName]; 

1B - 如果你需要顯示您所選擇的字體,你可以做到這一點之前,加載你的TableView:

NSIndexPath * selFntPath = [NSIndexPath indexPathForRow: [fontArray indexOfObject: currentFontName] 
               inSection: 0]; 

[tableView scrollToRowAtIndexPath: selFntPath 
       atScrollPosition: UITableViewScrollPositionMiddle 
         animated: NO]; 

2 - 檢查您是否取消選擇您的單元格

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath委託方法。

這是大多數示例代碼中的經典行爲。

選項:你可以保持在選擇物業以供用戶選擇和切換一個特定的控制(即勾選使用accessoryType財產您的細胞)顯示系統選擇行。

+0

1好,我已經更改了我的發佈代碼,2 - 沒有取消選擇。我可以看到的問題是該項目不在TableView中,除非您滾動幾次並填充它。一旦它在列表中,我將得到上面描述的快速選擇/取消選擇... – wayneh 2012-01-27 21:47:45

+0

好吧我已經更新了我的答案。 – 2012-01-27 22:07:19

+0

1b不工作,因爲TableView中沒有行! – wayneh 2012-01-28 17:40:31