2011-10-31 3 views
18

내 응용 프로그램에서 UItableview 아래에 활동 표시기를 추가하고 싶습니다. tableview는 스크롤되지만 거기에 활동 표시기를 추가하는 방법을 모르겠습니다.어떻게 UITableView 아래에 활동 표시기를 추가 할 수 있습니까?

더 자세히 설명하기 위해 테이블 ​​뷰를 스크롤 한 다음 더 많은 데이터를 얻으려면 작업 표시기로 새로 고침 옵션을 설정해야합니다.

내가 tableview의 상단에서 그것을 시도하고 효과가 있지만 어떻게 tableview 아래에 추가 할 수 있습니다 모르겠다. 여기에 몇 가지 샘플 코드가 있습니다.

 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 
if (isLoading) return; 
isDragging = YES; 


refreshHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT, 320, REFRESH_HEADER_HEIGHT)]; 
refreshHeaderView.backgroundColor = [UIColor clearColor]; 

refreshLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT, 320, REFRESH_HEADER_HEIGHT)]; 
refreshLabel.backgroundColor = [UIColor clearColor]; 
refreshLabel.font = [UIFont boldSystemFontOfSize:12.0]; 
refreshLabel.textAlignment = UITextAlignmentCenter; 

refreshArrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"refresharrow.png"]]; 
refreshArrow.frame = CGRectMake((scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT - 27)/2, 
           (scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT - 44)/2, 
           27, 44); 

refreshSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
refreshSpinner.frame = CGRectMake((scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT - 20)/2, (scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT - 20)/2, 20, 20); 
refreshSpinner.hidesWhenStopped = YES; 

[refreshHeaderView addSubview:refreshLabel]; 
[refreshHeaderView addSubview:refreshArrow]; 
[refreshHeaderView addSubview:refreshSpinner]; 
[tableview addSubview:refreshHeaderView]; 


} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
if (isLoading) { 
    // Update the content inset, good for section headers 
    if (scrollView.contentOffset.y > 0){ 
     NSLog(@"scrollView.contentOffset.y 1= %d",scrollView.contentOffset.y); 
     tableview.contentInset = UIEdgeInsetsZero; 
    } 
    else if (scrollView.contentOffset.y >= -REFRESH_HEADER_HEIGHT){ 
     NSLog(@"scrollView.contentOffset.y 2= %d",scrollView.contentOffset.y); 
     tableview.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0); 
    } 
} else if (isDragging && scrollView.contentOffset.y > scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT) { 
    // Update the arrow direction and label 
    [UIView beginAnimations:nil context:NULL]; 
    if (scrollView.contentOffset.y > scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT) { 
     // User is scrolling above the header 
     NSLog(@"scrollView.contentOffset.y 3= %d",scrollView.contentOffset.y); 
     refreshLabel.text = self.textRelease; 
     [refreshArrow layer].transform = CATransform3DMakeRotation(M_PI, 0, 0, 1); 
    } else { // User is scrolling somewhere within the header 
     refreshLabel.text = self.textPull; 
     [refreshArrow layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1); 
    } 
    [UIView commitAnimations]; 
} 
} 

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
if (isLoading) return; 
isDragging = NO; 
if (scrollView.contentOffset.y >= scrollView.contentOffset.y + REFRESH_HEADER_HEIGHT) { 
    // Released above the header 
    [self startLoading]; 
} 
} 

그래서 누군가 내가 그걸 어떻게 할 수 있는지에 대한 예제 코드를 알려주십시오.

실제로 iphone 응용 프로그램 개발에 새로운 소식입니다. 제발 도와주세요.

미리 감사드립니다.

답변

13

활동 표시기를 추가하는 가장 좋은 방법은 tableview의 바닥 글에 있습니다.

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
UIView *headerView = [[[UIView alloc] init]autorelease]; 

    [headerView setBackgroundColor:[UIColor clearColor]]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self 
           action:@selector(aMethod:) 
 forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Load More" forState:UIControlStateNormal]; 
button.frame = CGRectMake(10.0, 210.0, 160.0, 40.0); 


    [headerView addSubview:button]; 

    [headerLabel release]; 

    return headerView; 

} 

footerView에 버튼을 추가하고 필요한 동작을 버튼으로 설정하십시오. 앱 스토어 테이블 뷰가 작동하는 방식입니다. 버튼을 클릭하면 더 많은 데이터를 가져와 테이블 배열에 추가하여 애니메이션없이 테이블을 스크롤합니다.

+0

덕분에 내가 그렇게하려고합니다 ... – Emon

+0

: 당신이 나에게 약간의 소스 코드를 줄 것이다? – Emon

+0

전체 코드가 필요하거나 바닥 글 코드 – Anand

0

활동 표시기를 추가하는 또 다른 방법입니다. 표시된 데이터가 총 데이터 수와 같지 않은지 확인하십시오. 그런 다음 추가 셀 하나를 추가하고 "자세히보기"버튼을 추가하십시오. 보기를 클릭하면 해당 단추를 숨기고 해당 셀에 활동 표시기를 추가합니다. 그리고 프로세스가 완료되면 테이블 뷰를 다시로드하십시오.

감사합니다.

49

이것은 내가했던 방법입니다

UIActivityIndicatorView *spinner = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease]; 
[spinner startAnimating]; 
spinner.frame = CGRectMake(0, 0, 320, 44); 
self.tableView.tableFooterView = spinner; 

그런 다음 당신은 단지 그것을 제거 niltableFooterView을 설정합니다.

참고 : UITableViewStylePlain을 사용하는 경우, btw는 기본값 인 UITableViewCell입니다. 의 경우 45입니다.

+0

위대한 솔루션, 덕분에 – oyatek

+0

젠장, 이것은 쉬웠다. 많은 감사합니다. – HotFudgeSunday

17

스위프트 업데이트 : -

let pagingSpinner = UIActivityIndicatorView(activityIndicatorStyle: .Gray) 
pagingSpinner.startAnimating() 
pagingSpinner.color = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0) 
pagingSpinner.hidesWhenStopped = true 
tableView.tableFooterView = pagingSpinner 
+0

@cChathuranga Silva..Thank u –

관련 문제