嵌套表上的刷新控制不起作用(ios 开发)

Posted

技术标签:

【中文标题】嵌套表上的刷新控制不起作用(ios 开发)【英文标题】:refreshcontrol on nested table not working (ios development) 【发布时间】:2015-08-26 11:14:48 【问题描述】:

我正在尝试让“滑动刷新”在我的项目上工作,但由于某种原因它不会...

据我所知应该很简单

    编写动作监听器。 在 viewDidLoad 中实例化 refreshControl。 将其添加到选择的 tableView 中。

这就是我所做的,但它不起作用。

我在其中编写代码的控制器扩展了 UIViewController 并拥有一个滚动视图,而滚动视图又拥有一个表格视图。所以: 视图 => 滚动视图 => 表格视图

我想在内部 tableview 上放置 refreshController。

这里是我目前所掌握的一些相关代码 sn-ps。在 UIViewcontroller 的“viewDidLoad”中

self.refreshControl = [[UIRefreshControl alloc] init];
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[self.refreshControl addTarget:self
                    action:@selector(refresh:)
                    forControlEvents:UIControlEventValueChanged];
[self.tableCommunity addSubview:self.refreshControl];

以及刷新方法:

-(void)refresh:(UIRefreshControl *)refreshControl 
    [self loadOrganizationswithOffset:0 andLimit:item_load_limit andInviteStatus:invite_accepted];

当响应返回[self.refreshControl endRefreshing];被调用时,那里被调用的方法会产生一个网络调用来更新数据

仅此而已,其余工作正常。数据从网络加载并正确显示,只是滑动刷新部分没有。

我错过了什么吗?

【问题讨论】:

【参考方案1】:

尝试将您的UIRefreshControl 放在UIView 上,这是您的UITableView 的子视图:

UIView *refreshView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, table.frame.size.width, 44.0f)];
[table insertSubview:refreshView atIndex:0];

_refreshControl = [[UIRefreshControl alloc] init];
[_refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
[refreshView addSubview:_refreshControl];

【讨论】:

该解决方案的问题是刷新视图只能添加到 UITable 或其控制器 代码 sn-p 来自生产应用程序,所以我不确定我是否理解您在说什么。我创建了一个UIView,将其添加为我的UITableView 的子视图,并将UIRefreshControl 添加到UIView 奇怪...当我尝试您的 sn-p 时,它会引发异常:'NSInternalInconsistencyException',原因:'UIRefreshControl 只能由 UITableViewController 管理'【参考方案2】:

好吧,我好像找到了答案。正如我所料,这与我的观点建立方式有关。 在主页上,我有 1 个启用分页的滚动视图,我向其中添加了 3 个“子”页面(表格视图),每个页面显示一组不同的数据。 因此,为了获得有效的刷新控件,我需要为每个 tableview 添加一个新控件,而不是为所有三个添加一个新控件,回想起来,这很有意义。

我现在只有 3 个 UIRefreshController,每个选项卡一个

self.refreshControl = [[UIRefreshControl alloc] init];
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"pull_to_refresh", nil)];
[self.refreshControl addTarget:self
                        action:@selector(refresh:)
              forControlEvents:UIControlEventValueChanged];

self.refreshControl2 = [[UIRefreshControl alloc] init];
self.refreshControl2.attributedTitle = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"pull_to_refresh", nil)];
[self.refreshControl2 addTarget:self
                        action:@selector(refresh:)
              forControlEvents:UIControlEventValueChanged];

self.refreshControl3 = [[UIRefreshControl alloc] init];
self.refreshControl3.attributedTitle = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"pull_to_refresh", nil)];
[self.refreshControl3 addTarget:self
                        action:@selector(refresh:)
              forControlEvents:UIControlEventValueChanged];

当我初始化它们时,它们会被添加到它们各自的选项卡中

UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(xValue, 10, self.scrollView.frame.size.width-10,height)];
    tableView.tag = tabId;
    tableView.userInteractionEnabled = YES;
    tableView.backgroundColor = [UIColor whiteColor];
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.layer.cornerRadius = 8;
    tableView.layer.masksToBounds = YES;
    tableView.dataSource = self;
    tableView.delegate = self;
    tableView.alwaysBounceVertical = YES;
    switch(tabId)
        case 0:
            [tableView addSubview:self.refreshControl];
            break;
        case 1:
            [tableView addSubview:self.refreshControl2];
            break;
        case 2:
            [tableView addSubview:self.refreshControl3];

案件结案(终于)。

【讨论】:

以上是关于嵌套表上的刷新控制不起作用(ios 开发)的主要内容,如果未能解决你的问题,请参考以下文章

自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)

iOS - UIPageControl 上的 UIButton 不起作用

快速刷新控制,endRefreshing 不起作用 [重复]

同步数据透视表 - VBA 代码不起作用

iOS 上的 CloudKit + CoreData 和 watchOS 同步不起作用

角度智能表 - 分页对刷新数据对象不起作用