2010-12-23 21 views
10

下面的代碼似乎沒有效果。我希望它以同樣的方式被highlighed當你在一排挖掘它突出如何突出顯示UITableView中的一行

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    [cell.textLabel setHighlighted:YES]; 


    return cell; 
} 
+0

This [post](http://stackoverflow.com/questions/1845773/how-to-initially-select-a-row-in-uitableview)可能會有所幫助。 – petert 2010-12-23 12:35:27

回答

27

這條線將處理重繪你的細胞,標籤和附件:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
1

你有兩個選擇。既可以使用表格視圖的選擇:

[tableView selectRowAtIndexPath: indexPath animated: YES scrollPosition: UITableViewScrollPositionNone]; 

或更改表格單元格的背景色表視圖委託:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    cell.backgroundColor = ... 
} 
15
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection: 0]; 

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

通常工作

如果你是使用界面構建器來構建界面,需要檢查的一點是您指定了表格視圖控制器的視圖。如果您沒有真正指定視圖,則此選擇消息可能無處可用。

(您可以通過在界面構建器檢查器窗口中選擇表格視圖控制器並將「視圖」的出口拖動到要在其中進行選擇的表格視圖來指定視圖)。

2

您可以使用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    [cell.textLabel setHighlighted:YES]; 


    return cell; 
} 
3
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    return YES; 
} 

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    // do something here 
} 

試試這個:)

+0

只適用於iOS 6 http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html – 2013-06-05 18:00:48

21

正如其他人所指出的那樣,你可以使用此方法以編程方式選擇一個單元格:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

但是,應該小心不要過早調用此方法。

第一次包含所述tableView的視圖控制器是initialized,您應該最早調用此方法的範圍是viewDidAppear:

所以,你應該做這樣的事情:

- (void)viewDidAppear:(BOOL)animated 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; // set to whatever you want to be selected first 
    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
} 

如果你嘗試把這個調用到viewDidLoadviewWillAppear:,或任何其他早期的觀點生命週期的呼叫,它可能會無法正常工作或有奇怪的結果(例如作爲滾動到正確的位置,但不選擇單元格)。

+0

在iOS 9上,似乎從`viewWillApear`和`viewDidAppear`工作,並且而不是來自`viewDidLoad`。 – Adrian 2016-04-15 16:21:17