嵌套表上的刷新控制不起作用(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 不起作用 [重复]