2016-07-05 6 views
1

私は新しいiOSプログラマです。私は1つの問題を抱えています。 各リフレッシュ時に配列からUITableViewに30個のデータを追加するには

にユーザーがスクロールそれを下にはあなたが私助けてくださいでした私はUITableViewていると私は配列から毎回30の項目を追加したいですか?あなたは、コードの下に使用することができます

#import "ViewController.h" 
@interface ViewController() 
{ 
    UIRefreshControl* refreshControl; 
    int counter; 
    //NSMutableArray *new; 
} 

@end 

@implementation ViewController 
@synthesize tableViewForScreen; 
@synthesize array; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

refreshControl = [[UIRefreshControl alloc]init]; 
    [tableViewForScreen addSubview:refreshControl]; 
    [refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged]; 
    //new =[[NSMutableArray alloc]init]; 
    array = [[NSMutableArray alloc] initWithCapacity:570]; 

    counter =30; 
    if(counter>[array count]){ 


     counter = [array count]; 
    } 

} 
- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [ tableViewForScreen flashScrollIndicators]; 
} 

- (void)viewDidUnload 
{ 
    [self setTableViewForScreen:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

#pragma mark - Table View 
// set number of Sections in Table 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

return 1; 

} 

// set number of Rows in each Sections of Table 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return counter; 
} 

// Set animated style for Table Cell Editing 
-(void) setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [self.tableViewForScreen setEditing:editing animated:animated]; 
} 

// Customize the appearance of Table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    }  
    cell.textLabel.text = [array objectAtIndex:indexPath.row]; 
    return cell; 
} 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { 
    CGPoint offset = aScrollView.contentOffset; 
    CGRect bounds = aScrollView.bounds; 
    CGSize size = aScrollView.contentSize; 
    UIEdgeInsets inset = aScrollView.contentInset; 
    float y = offset.y + bounds.size.height - inset.bottom; 
    float h = size.height; 
    // NSLog(@"offset: %f", offset.y); 
    // NSLog(@"content.height: %f", size.height); 
    // NSLog(@"bounds.height: %f", bounds.size.height); 
    // NSLog(@"inset.top: %f", inset.top); 
    // NSLog(@"inset.bottom: %f", inset.bottom); 
    // NSLog(@"pos: %f of %f", y, h); 

    float reload_distance = 10; 
    if(y > h + reload_distance) { 
     NSLog(@"load more rows"); 
     if(counter+30<[array count]){ 
      counter += 30; 
      [tableViewForScreen reloadData]; 
      [tableViewForScreen flashScrollIndicators]; 
     } else if([array count]>counter) { 
      counter = [array count]; 
      [tableViewForScreen reloadData]; 
      [tableViewForScreen flashScrollIndicators]; 
     } 
    } 
} 
- (void)dealloc { 
    [tableViewForScreen release]; 
    [super dealloc]; 
} 

@end 
+0

UiTableViewの各 "reloadData"には、前回のリロードより30項目以上が表示されますか? – ddb

+0

はい@ddbそれぞれのリロードで30個以上のアイテムを追加したい –

+0

私の答えを確認してください:) – ddb

答えて

2

ここでは(私はそれがすでにデータソースとデリゲートのセットがあるとし、「myTableView」と呼ばれる、シンプルなのUITableViewが含まれているのUIViewControllerの実装の一例であり、この問題を解決するには、セクションが1つしかないと仮定します。つまり、ユーザーがtableViewを下にスクロールするたびに、テーブルに30個のアイテムを追加するにはカウンタを3030ずつ増やします(

)。
#import "ViewController.h" 
@interface ViewController() 
{ 
    int counter; 
} 

@end 

@implementation ViewController 
@synthesize tableViewForScreen; 
@synthesize array; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [tableViewForScreen addSubview:refreshControl]; 
    array = [[NSMutableArray alloc] initWithCapacity:570]; 
    for(int i=0; i<570; i++) 
     [array addObject:[NSString stringWithFormat:@"test%d",i]]; 

    counter=30; 
    if(counter>[array count]){ 
     counter = [array count]; 
    } 

} 
- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [tableViewForScreen flashScrollIndicators]; 
} 

- (void)viewDidUnload 
{ 
    [self setTableViewForScreen:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

#pragma mark - Table View 
// set number of Sections in Table 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

// set number of Rows in each Sections of Table 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return counter; 
} 

// Set animated style for Table Cell Editing 
-(void) setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [self.tableViewForScreen setEditing:editing animated:animated]; 
} 

// Customize the appearance of Table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    }  
    cell.textLabel.text = [array objectAtIndex:indexPath.row]; 
    return cell; 
} 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { 
    CGPoint offset = aScrollView.contentOffset; 
    CGRect bounds = aScrollView.bounds; 
    CGSize size = aScrollView.contentSize; 
    UIEdgeInsets inset = aScrollView.contentInset; 
    float y = offset.y + bounds.size.height - inset.bottom; 
    float h = size.height; 
    // NSLog(@"offset: %f", offset.y); 
    // NSLog(@"content.height: %f", size.height); 
    // NSLog(@"bounds.height: %f", bounds.size.height); 
    // NSLog(@"inset.top: %f", inset.top); 
    // NSLog(@"inset.bottom: %f", inset.bottom); 
    // NSLog(@"pos: %f of %f", y, h); 

    float reload_distance = 10; 
    if(y > h + reload_distance) { 
     NSLog(@"load more rows"); 
     if(counter+30<[array count]){ 
      counter += 30; 
      [tableViewForScreen reloadData]; 
      [tableViewForScreen flashScrollIndicators]; 
     } else if([array count]>counter) { 
      counter = [array count]; 
      [tableViewForScreen reloadData]; 
      [tableViewForScreen flashScrollIndicators]; 
     } 
    } 
} 
- (void)dealloc { 
    [tableViewForScreen release]; 
    [super dealloc]; 
} 

@end 

免責事項:底面に達したかどうかを確認するために、私はこの0を使用しました

+0

それは良い考えではありません。テーブルをリフレッシュ/リロードするだけでもテーブルにデータを追加します。 – Mahesh

+0

@Mahesh、これはSwapnil Patelが尋ねたものです:)第1と第2の質問のコメント – ddb

+0

が動作していないという結果がtest0、test1、test2、test0、test1、test2test0、test1、test2test0、test1、test2test0、test1、test2test0 、test1、test2 ... n so –

0

:?

NSMutableArray *newInfos = //Your New data; 

NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:newInfos.count]; 
for(int i = 0; i < newInfos.count; i++) { 
    NSIndexPath * indexPath = [NSIndexPath indexPathForRow:i inSection:0]; 
    [indexPaths addObject:indexPath]; 
} 

[self.tableView beginUpdates]; 
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight]; 
[self.tableView endUpdates]; 
0

あなたが何を意味するのか、あなたはtablviewにインセット30個のアイテムをお奨め意味します。だからUI

を更新するために、データソースを更新し、メソッドを使用
(void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; 
+0

メソッドは大丈夫です.-(void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)アニメーション; –

+0

それぞれのリロードに30個のアイテムを追加したい、例えば1回目のリロード30,2回目のリロード - それ以上30を追加するので、カウントは60になります –

+0

したがって、 'reloadData'メソッドを使用するときはdataSourceを変更してください。 –

関連する問題