[ios] UITableViewController없이 UITableView를 새로 고치려면 당기십시오.

UIViewController 내의 UITableView에서 pull to refresh 기능을 구현하려고합니다. UITableView가 뷰 컨트롤러에서 더 작은 하위보기가되기를 원하기 때문에 UITableViewController를 사용할 수 없습니다. 나는 이것이 가능하다고 생각하지만 그것을 구현 한 사람이 있습니까?



답변

: 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()
}


답변

목표 -C :

이것이 테이블 뷰에 대해 새로 고침 풀을 구현하는 방법입니다. 컬렉션보기의 경우와 동일합니다. 테이블 뷰 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];
}


답변

@berik 의이 솔루션은 정상적으로 작동하지만 UIController는 UITableViewController 위에 표시됩니다. 이를 수정하는 방법은 다음 변경을 수행하는 것입니다.

override func viewDidLoad() {
    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
    tableView.backgroundView = refreshControl // <- THIS!!!
}

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


답변

UIViewController와 간단한 테이블 뷰를 사용하여 EGORefreshTableHeaderView를 구현했습니다. 테이블 뷰 자체가 스크롤 뷰에서 상속되면 EGO가 스크롤 뷰를 매개 변수로 사용하는 곳의 트릭입니다.

그것은 단지 몇 가지 추가 연결이 필요합니다 🙂

도움이 되었기를 바랍니다.


답변

viewController의 loadView 메소드 내에 UIRefreshControl을 작성하면 모든 것이 잘 작동하는 것 같습니다. UIRefreshControl은 정상적으로 동작합니다. iOS 7.1 및 iOS 8.2에서 테스트


답변

ODRefreshControl 을 사용 했습니다 . 위와 같은 해킹이 필요하지 않으며 tableView.backgroundView = refreshControl거의 같은 방식으로 작동하며 더 나은 UI를 제공합니다.


답변