无需UITableViewController即可刷新UITableView

时间:2012-04-24 03:55:10

标签: ios objective-c iphone uitableview pull-to-refresh

我正在尝试在UIViewController中的UITableView中实现一个pull to refresh功能。我不能使用UITableViewController,因为我希望UITableView在视图控制器中是一个较小的子视图,上面还有一些其他东西。我认为这是可能的,但是有人看过它的实现吗?

6 个答案:

答案 0 :(得分:464)

直接向UITableView添加刷新控件,而不使用UITableViewController

override func viewDidLoad() {
    super.viewDidLoad()
    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: #selector(refresh(_:)), for: .valueChanged)

    if #available(iOS 10.0, *) {
        tableView.refreshControl = refreshControl
    } else {
        tableView.backgroundView = refreshControl
    }
}

@objc func refresh(_ refreshControl: UIRefreshControl) {
    // Do your job, when done:
    refreshControl.endRefreshing()
}

答案 1 :(得分:11)

<强> 目标C

这是为表视图实现pull to refresh的方法。 与集合视图的情况相同。只需将表视图alloc替换为集合视图即可。

UITableView *tableViewDemo  =  [[UITableView alloc]init];
tableViewDemo.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
tableViewDemo.dataSource =  self;
tableViewDemo.delegate =  self;
[self.view addSubView: tableViewDemo];

UIRefreshControl *refreshController = [[UIRefreshControl alloc] init];
[refreshController addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[tableViewDemo addSubview:refreshController];

#pragma mark - Handle Refresh Method

-(void)handleRefresh : (id)sender
{
   NSLog (@"Pull To Refresh Method Called");
   [refreshController endRefreshing];
}

答案 2 :(得分:4)

@berik的这个解决方案工作正常,但UIController显示在UITableViewController的顶部。修复它的方法是进行此更改:

double diskSize = new File("/").getTotalSpace();
String userName = System.getProperty("user.name");
double maxMemory = Runtime.getRuntime().maxMemory();

答案 3 :(得分:3)

我已经用UIViewController和一个简单的表视图实现了EGORefreshTableHeaderView,诀窍是在EGO将滚动视图作为参数的地方,如果你看表​​视图本身继承滚动视图。

它只需要和一些额外的连接:)

希望这有帮助。

答案 4 :(得分:-1)

似乎如果你在viewController的 loadView 方法中创建了UIRefreshControl,一切正常。 UIRefreshControl的行为应该如此。使用iOS 7.1和iOS 8.2进行测试

答案 5 :(得分:-1)

我最终使用ODRefreshControl。 它不需要像上面tableView.backgroundView = refreshControl这样的任何黑客,工作方式几乎相同,并提供更好看的用户界面。