programing

끌어 당겨서 UITableView 컨트롤러 없이 UITableView 새로 고침

easyjava 2023. 4. 29. 10:00
반응형

끌어 당겨서 UITableView 컨트롤러 없이 UITableView 새로 고침

UIViewController 내의 UITableView에서 풀 투 리프레시 기능을 구현하려고 합니다.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:

이렇게 하면 테이블 보기에 대한 풀 투 리프레시를 구현할 수 있습니다.컬렉션 뷰의 경우와 동일합니다.테이블 뷰 할당을 컬렉션 뷰로 바꾸기만 하면 됩니다.

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의 이 솔루션은 정상적으로 작동하지만 UIC 컨트롤러는 UITableView 컨트롤러 위에 표시됩니다.이 문제를 해결하는 방법은 다음과 같습니다.

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 메서드 내에 UIRfreshControl을 생성하면 모든 것이 정상적으로 작동하는 것 같습니다.UIRfresh Control은 정상적으로 작동합니다.iOS 7.1 및 iOS 8.2로 테스트됨

결국 ODRefreshControl을 사용하게 되었습니다.위와 같은 해킹은 필요 없습니다.tableView.backgroundView = refreshControl거의 동일한 방식으로 작동하며 더 나은 UI를 제공합니다.

언급URL : https://stackoverflow.com/questions/10291537/pull-to-refresh-uitableview-without-uitableviewcontroller

반응형