zoukankan      html  css  js  c++  java
  • 浅析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处理,就能达到你要的目的了

  • 相关阅读:
    数组地址,数组首地址与数组首元素地址的区别
    memset,memcpy与strcpy
    OJ之大数与高精度题必备知识
    OJ之星期几算法(泽勒一致性)
    二分查找及其优化
    爱上vim之快捷键使用技巧与个性化配置
    shell之终极shell——zsh
    memset的一些坑
    OO终章
    hOmewOrk 第三单元 总结
  • 原文地址:https://www.cnblogs.com/yajunLi/p/6293052.html
Copyright © 2011-2022 走看看