可能很多人都遇到過這種情況:
tableview列表,有時加載完,需要默認選中某一行,給予選中效果;或者需要執行某行的點擊事件。
我們舉例:
比如我想默認選中第一行
可能我們第一個想法就是這樣:
[mytableview selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
然而你會發現,如果你這樣寫了,有時候往往是沒有效果的,然后就尷尬了。。。
其實,我們執行這句話后,並不會走到tableview的didSelectRowAtIndexPath代理事件內,所以期望的效果肯定是沒有的,那這句話做了什么呢?
答案就是:
執行這句話后, tableview會選中cell,只不過會執行cell內的一個setSelected自帶方法,如果你正好在這里面做了點擊效果處理,那么是不會受影響的。
但是,如果你要做的是多選效果、或者你要的默認選中,是同時需要執行didSelectRowAtIndexPath內部邏輯效果時,悲劇的我們會發現選中無效了。。。
那么,如果我們想達到我們的目的,該怎么做呢?
可以通過下面這樣:
//默認選中第一行,並執行點擊事件 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [mytableview selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop]; if ([mytableview.delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) { [mytableview.delegate tableView:mytableview didSelectRowAtIndexPath:indexPath]; }
在后面,添加一句delegate處理,就能達到你要的目的了