2013-10-10 154 views
31

嗨,我有情況下,在一個iPad應用程序我的master controller有名單和細節控制器有它的細節,一個典型的UISplitViewController模式。 我想要實現的是,我的第一行應該是最初選擇的,後來我想給用戶選擇選擇。 我正在使用單元的setSelecteddidSelectRowAtIndexPath方法刪除這樣的選擇。UITableViewCell設置選擇最初

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0]; 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:path]; 
    [cell setSelected:NO]; 
} 

初始小區但 後我沒有細胞得到選擇,請幫助我。

+0

你想自動選擇您的tableView的第一行? – wesley

回答

41

試試這個

NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:0 inSection:0]; 
[self tableView:tableViewList didSelectRowAtIndexPath:selectedCellIndexPath]; 
[tableViewList selectRowAtIndexPath:selectedCellIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 

OR

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (/* should be selected */) { 
    [cell setSelected:YES animated:NO]; 
} 
} 
8

我不知道你期待着這個答案。通過,如果你想在你的tableView選擇第一行用了手動選擇默認,只需啓動didSelectRowAtIndexPath方法這樣

- (void)viewDidAppear:(BOOL)animated { 
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
    [myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
} 
70

對於細胞出現選擇,你必須從-tableView:willDisplayCell:forRowAtIndexPath:內呼叫-setSelected:animated:像這樣:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (/* should be selected */) { 
     [cell setSelected:YES animated:NO]; 
    } 
} 

從其他地方調用-setSelected不起作用。

+15

這應該是公認的答案。 – RaffAl

+19

如果你可以添加下面的代碼,這個答案會很棒[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];這是允許用戶取消選擇該單元格。如果缺少該行,則不能取消該行。 – cateof

+3

但是如果你想使用[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];你必須將它粘貼在[tableView:cellForRowAtIndexPath:]中,因爲在[tableView:weillDisplayCell:]它不起作用。 –

5

這也將有助於在POP導航

h文件的情況下,

NSIndexPath *defaultSelectedCell 

.m文件

viewDidAppear將這個代碼ViewDidLoad

defaultSelectedCell= [NSIndexPath indexPathForRow:0 inSection:0]; 

[self.tableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

這將有助於當你取出,在tableView didSelectRowAtIndexPath方法將這個代碼viewWillAppear

[self.catTableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

defaultSelectedCell = [NSIndexPath indexPathForRow:indexPath.row inSection:0]; 

這有助於我非常任第一次裝載或彈出導航。

19

斯威夫特3:選擇單元初始

import UIKit 

class MyViewController: UIViewController, UITableViewDelegate { 
    @IBOutlet weak var tableView: UITableView! 
    ... 

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 

     if /* your code here */ == indexPath.row { 
      tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) 
     } 
    } 

    ... 
} 
+2

這應該是選擇的答案,因爲當選擇另一行時它會保留選擇。也許在if語句中添加一個檢查,以確保它只在該行不是最新時才選擇該行; y選擇tho。 –

+1

我同意道格拉斯。這應該被標記爲正確答案。過去幾個小時我一直在尋找解決方案,這解決了我的問題。 – user30646

+0

@ user30646 same here!..這應該是正確的答案,因爲它幫助我解決了我的問題! – Pangu

相關問題