嵌套表上的刷新控件不工作(ios开发)

嵌套表上的刷新控件不工作(ios开发),ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我试图让“刷刷新”在我的项目工作,但由于某些原因,它只是不会 据我所知,这应该很简单 编写动作侦听器 在viewDidLoad中实例化refreshControl 将其添加到所选的tableView中 这就是我所做的,但它不起作用 我在其中编写代码的控制器扩展了UIViewController并持有一个scrollview,而scrollview又持有一个tableview。因此: 视图=>scrollview=>tableview 我想把refreshController放在内部的tablev

我试图让“刷刷新”在我的项目工作,但由于某些原因,它只是不会

据我所知,这应该很简单

  • 编写动作侦听器
  • 在viewDidLoad中实例化refreshControl
  • 将其添加到所选的tableView中
  • 这就是我所做的,但它不起作用

    我在其中编写代码的控制器扩展了UIViewController并持有一个scrollview,而scrollview又持有一个tableview。因此: 视图=>scrollview=>tableview

    我想把refreshController放在内部的tableview上

    这里是一些相关的代码片段,我到目前为止已经得到了。在UIViewcontroller的“viewDidLoad”中

    以及刷新方法:

    -(void)refresh:(UIRefreshControl *)refreshControl {
        [self loadOrganizationswithOffset:0 andLimit:item_load_limit andInviteStatus:invite_accepted];
    }
    
    当响应返回
    [self.refreshControl endRefreshing]时,在那里调用的方法将生成一个网络调用来更新数据被调用

    就这样,其余的都很好。数据从网络加载并正确显示,只有“刷到刷新”部分不正确


    我遗漏了什么吗?

    尝试将您的
    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];
    

    好吧,看来我找到了答案。正如我所预料的那样,这与我构建视图的方式有关。 在主页上,我有一个启用了分页的scrollview,我在其中添加了3个“子”页面(TableView),每个页面显示不同的数据集。 因此,为了使刷新控件能够正常工作,我需要在每个tableview中添加一个新控件,而不是在所有三个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];
    

    案例结束(最后)。

    该解决方案的问题是,RefreshView只能添加到UITable或其控制器。代码片段来自生产应用程序,因此我不确定是否理解您的意思。我创建了一个
    UIView
    ,将其添加为我的
    UITableView
    的子视图,并将
    UIRefreshControl
    添加到
    UIView
    中。。。当我尝试您的代码段时,它会引发一个异常:“NSInternalInconsistencyException”,原因是:“UIRefreshControl只能由UITableViewController管理”
    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];