4

UITableView를 사용하는 프로젝트에서 UIRefreshControl의 기능을 추가했습니다. 응용 프로그램은 웹 서비스에서 테이블 뷰로 항목을 가져와 작동합니다. 그것은 어떤있을 경우 새 항목을 추가하여 새로 고침, 내가 새로 고침 당겨 경우 지금UITableView UIRefreshControl이 처음보기를 표시하지 않습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; 
    refreshControl.tintColor = [UIColor grayColor]; 
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating New Entries"]; 
    [refreshControl addTarget:self action:@selector(pullToRefresh) forControlEvents:UIControlEventValueChanged]; 
    self.refreshControl = refreshControl; 

    [self pullToRefresh];  
} 

- (void) pullToRefresh 
{ 
    counter = 1; 
    [self fetchEntriesNew:counter]; // My code for updating table view 

    [self performSelector:@selector(updateTable) withObject:nil afterDelay:2]; 
} 

- (void)updateTable 
{ 
    [self.tableView reloadData]; 
    [self.refreshControl endRefreshing]; 
} 

와 나에게있는 tableview의 상단에 다음과 같은보기를 보여줍니다 : 다음은 내가 UIRefreshControl을 추가하는 데 사용했던 코드입니다

enter image description here

앱이 처음 실행되거나 열릴 때를 제외하고 모든 것이 잘 작동합니다. 위의 이미지에서 보여준 뷰는 표시되지 않지만 테이블 뷰는 새로 고침됩니다. 새로 고침 할 때마다 새로 고침 컨트롤보기를 표시하고 싶습니다. 누군가 내가 잘못하고있는 것을 지적 할 수 있습니까? 감사!

업데이트 : [self refreshControl beginRefreshing]이 (가) 추가되었으며 UIRefreshControl의 회 전자보기가 현재 표시되어 있지만 위의 첫 번째 항목은 tableview입니다. 누구든지 그것을 해결하는 방법을 지적 할 수 있습니까?

+0

중복 가능성 [UIRefreshControl이 -있는 UITableViewController가 UINavigationController가 내부에있을 때 작동하지 beginRefreshing] (http://stackoverflow.com/questions/14718850/uirefreshcontrol-beginrefreshing-not-working-when-uitableviewcontroller-is-ins) – JosephH

답변

1

[self pullToRefresh] 호출을 viewDidLoad 대신 viewWillAppear로 옮깁니다.

+0

[self pullToRefresh]를 추가했습니다. wWillAppear하지만 출력에 차이가 없음을 확인했습니다. 내가 뭘 할 수 있니? – AJ112

+0

원하는 결과가 아닌 것으로 보이는 이미지를 게시 할 수 있습니까? 이 과정을 다시 읽으면 문제를 완전히 이해하고 있는지 확인하고 싶습니다. – Dan

+0

앱이 시작되면 TableView가 새 데이터로 새로 고침되지만 회 전자가 표시되지 않습니다. 하지만 내가 수동으로 새로 고침을한다면 당장 나타나야합니다. 혼란을 없애기를 희망 함 – AJ112

0

클래스가

만약의 UIViewController

의 서브 클래스 인 경우

1. [self setRefreshControl:tableRefreshControl]; 
2. [self.m_TableView addSubview:tableRefreshControl]; 

중 하나가 1 또는 2를 추가 코드에 추가됩니다도 그들 중 당신의 tableview에 UIRefreshControl을 추가 할 수있는 두 가지가 있습니다 클래스가있는 UITableViewController의 서브 클래스는 다음 그럼 그 4 인치 아이폰 OS 장치가없는 것을 발견을 위해이 문제는 정말 날 당황했다

self.refreshControl = refreshControl; with 2 line 
+0

내 클래스는 UITableViewController의 서브 클래스이므로, self.refreshControl = refreshControl을 [self.tableView addSubview : tableRefreshControl]; 하지만 tableRefreshControl은 무엇입니까? 그것은 그것을 선언하지 않았기 때문에 그것을 인식하지 못합니다. 좀 더 정확하게 할 수 있습니까? 감사! – AJ112

12

교체하려고하다 이 문제는 3.5 인치 장치에서 발생합니다.

처음으로 refreshControl이 자체적으로 beginRefreshing하는 것과 시작 동작을 수행 할 때의 차이점을 알아 내려고했습니다. 끌어 오기 동작입니다.

내가 UIRefreshControl.It에 애플의 문서를 확인은

The control does not initiate the refresh operation directly. Instead, it sends the UIControlEventValueChanged event when a refresh operation should occur. 그래서 내가 refreshControl의 전시를 트리거하는 풀 동작을 시뮬레이션하기 위해 뭔가를 추가 할 수 있습니다 어쩌면 생각했다.

[yourScrollView(or tableView) setContentOffset:CGPointMake(0.0f, -60.0f) 
             animated:YES]; 
[yourRefreshControl beginRefreshing]; 

작동합니다!

PS. UIRefreshControl도 UIScrollView와 함께 작동합니다. [yourScrollView addSubview:yourRefreshControl]가 작동합니다.

[refreshControl beginRefresh]

코드를 삽입 : 코드 앞에

+0

이 문제를 해결할 수있는 것처럼 보입니다. 나는 당신의 코드를 시도했지만 그것은 나를 위해 작동하지 않았다. 나는 이것을 사용했다. [self.tableView setContentOffset : CGPointMake (0.0f, 60.0f) animated : YES]; [self.refreshControl beginRefreshing]; – AJ112

+0

이제 테이블 뷰의 첫 번째 셀이 탐색 모음 뒤에 있습니다. 어떻게 고칠 지 말해 줄 수 있어요? – AJ112

+0

안녕하세요 @ AJ112, 그것은'60.0f'가 아닌'-60.0f'입니다. - (void) setContentOffset : (CGPoint) contentOffset animated : (BOOL) animated는 __offset__을 설정하기위한 것이므로 여기에서 오프셋은 __pull down__ 제스처를 시뮬레이트하기 위해 음수 여야합니다. 양수로 설정하면 내용의 맨 위가 바깥 쪽이됩니다. 창문. – satgi

0

[refreshControl layoutIfNeeded]의

관련 문제