iOS 개발 튜 토리 얼 의 UIRefreshControl 에 사용 되 는 구덩이 밟 기 안내
4838 단어 iosuirefreshcontrol구 덩이 를 밟다
- (void) loadRefreshView
{
//
_refreshControl = [[UIRefreshControl alloc] init];
_refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@" "];
[_refreshControl addTarget:self action:@selector(loadData) forControlEvents:UIControlEventValueChanged];
[self.securityCollectionView addSubview:_refreshControl];
[self.securityCollectionView sendSubviewToBack:_refreshControl];
}
//
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
decelerate = YES;
if (scrollView.contentOffset.y < HEIGHT_REFRESH) {
dispatch_async(dispatch_get_main_queue(), ^{
_refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@" "];
});
[_refreshControl beginRefreshing];
[self loadData];
}
}
//
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y >= HEIGHT_REFRESH) {
_refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@" "];
}
else if (!scrollView.decelerating) {
_refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@" "];
}
}
//
- (void) endRefreshControl
{
[_refreshControl endRefreshing];
}
//
- (void) loadData
{
[self endRefreshControl];
// [self performSelector:@selector(endRefreshControl) withObject:nil afterDelay:2];
}
// collection collectionView,
// , ;
self.rootView.collectionView.alwaysBounceVertical = YES;
문제 설명다음 화 제 를 이 어 TabBar 의 클릭 리 셋 을 실현 한 후에 도 계속 작성 에 성공 하고 UITableView 를 리 셋 하기 시 작 했 습 니 다.그래서 iOS 10 이후 UIScrollView 는 UIRefreshControl 의 속성 이 있 음 을 감안 하여 아예 자체 적 으로 썼 습 니 다.그래서 다음 과 같은 코드 가 생 겼 습 니 다.
UITableView 에 UIRefreshControl 추가
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
refreshControl.tintColor = [UIColor grayColor];
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@" "];
[refreshControl addTarget:self action:@selector(refreshTabView) forControlEvents:UIControlEventValueChanged];
self.newsTableView.refreshControl = refreshControl;
드 롭 다운 리 셋 이벤트
-(void)refreshTabView
{
//
[self.newsData insertObject:[self.newsData firstObject] atIndex:0];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.newsTableView reloadData];
if ([self.newsTableView.refreshControl isRefreshing]) {
[self.newsTableView.refreshControl endRefreshing];
}
});
}
TabBar 클릭 이벤트
-(void)doubleClickTab:(NSNotification *)notification{
// NSInteger
// , NSNumber
NSNumber *index = notification.object;
if ([index intValue] == 1) {
//
[self.newsTableView.refreshControl beginRefreshing];
}
}
이때 의 효 과 는 다음 과 같 습 니 다.바로 드 롭 다운 하여 리 셋 하면 되 지만 TabBar 를 누 르 면 안 됩 니 다.이상 상황 리 셋.gif
문 제 를 분석 하 다
Google 도움말 을 통 해 시스템 자체 의 UIRefreshControl 에 두 개의 함정 이 있 기 때문에 이 유 를 알 게 되 었 습 니 다.
UIRefreshControl 을 수 동 으로 설정 한 이벤트;
위의 세 번 째 단계 의 코드 만 다음 과 같이 수정 해 야 합 니 다.
-(void)doubleClickTab:(NSNotification *)notification{
// NSInteger
// , NSNumber
NSNumber *index = notification.object;
if ([index intValue] == 1) {
//
//animated YES,
[self.newsTableView setContentOffset:CGPointMake(0, self.newsTableView.contentOffset.y - self.newsTableView.refreshControl.frame.size.height) animated:NO];
[self.newsTableView.refreshControl beginRefreshing];
[self.newsTableView.refreshControl sendActionsForControlEvents:UIControlEventValueChanged];
}
}
최종 효과:정상 상황 리 셋.gif
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.