淺析iOS tableview的selectRowAtIndexPath選中無效(默認選中cell無效)


可能很多人都遇到過這種情況:

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處理,就能達到你要的目的了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM