2012-02-07 10 views
2

テーブルに表示するレコードは100種類あります。しかし、私は10レコードだけを表示し、ユーザーが最後の行をクリックすると(Which will have a button that will say load the next 10 records)テーブルは次の10レコードを行にします。TableViewにレコードをロードする - (その他のボタン)

最後のセルにmoreボタンが正常に表示されました。しかし、私は一度に10レコードを表示する方法を知らない。これまでの私のコード。

のviewDidLoad

self.arrayThatContainsAllHundredRecords= [NSArray arrayWithArray:hundredRecordsArray]; 

[self performSelector:@selector(addTheTableFooter:) withObject:nil afterDelay:0.5]; 

addTheTableFooter

UIView* footer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 30)]; 

[footer addSubview:moreButton]; // i have also added an event to the button click see below, and i have not shown it here. 

self.tableView.tableFooterView =footer; 

[self.mainWindow removeFromSuperview]; 

[self.tableView reloadData]; 

上記すべて100レコードを表示した後Moreボタンを表示します。

moreButtonClickAction

-(void)moreButtonClickAction { 
NSLog(@"Suppose to load the next 10 records"); 
} 

numberOfRowsInSection

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    return [self.arrayThatContainsAllHundredRecords count]; 
} 

私はこのコードを編集する方法が必要ですので、私は一度に10件のレコードを表示し、次の10時に表示されますユーザーはmoreボタンをクリックします。 (今の合計レコードは20でなければなりません - moreボタン)をクリックした結果として、(前回10件の+ 10件のレコード)

注:私はすべての100件のレコードをダウンロードし、viewDidLoad方法でself.arrayThatContainsAllHundredRecordsでそれを保存します。

私は、[self.tableView reloadData];を実行する前に、10レコードをロードするように変更する必要があると思います。

私は53レコードしか持っていないと言っています。その後、ユーザーはmoreボタンを5回クリックし、6番目のインスタンスでは、表には3つのレコードしか表示されません。どのようにこれはtableview:numberOfRowsInSectionで処理することができます:?

+0

待ちをするので、最初の10行が表示され、ユーザーはその時点で表示されているものを、複数のレコードを表示するためにボタンを押したとき?最初の20レコード、または11-20レコードのみ?私の答えで私は前者を仮定し、MusiGenesisは後者のために応答しています。 – yuji

+0

最初の10レコード+ 2番目の10レコードが表示されます。現在合計で20のレコードがあるはずです – sharon

答えて

2

tableView:numberOfRowsInSection:は、表示される行の数を決定する方法なので、最初の手順で変更することになります。表示する必要のある行数を追跡するには、View Controllerにプロパティも必要です。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.numberOfRowsVisible; 
} 

さらにボタンをクリックすると、その数を増やしてtableViewデータをリロードする必要があります。一度に10行を表示するために

-(void)moreButtonClickAction { 
    if (self.numberOfRowsVisible < self.maxNumberOfRows) 
     self.numberOfRowsVisible = MIN(self.numberOfRowsVisible + 10, self.maxRows); 
    [self.tableView reloadData]; 
} 
+0

私はそれを手に入れます。しかし、私たちが53のレコードを持っていれば、何が起きるでしょう。 'moreButtonClickAction'イベントで10をハードコーディングします。ユーザーが6回目をクリックすると、例外が発生します。私たちはこれをどのように解決することができましたか(申し訳ありませんが私は前に質問にこれを言及していませんでした) – sharon

+0

私の編集を参照してください。 – yuji

+0

最初は、ビューロード時にデータがロードされるので、 'self.numberOfRowsVisible'は何ですか?当初はそれに価値を与えていますか? – sharon

1

、あなたtableview:numberOfRowsInSection:は、(代わりにソース・アレイ内のレコードの合計数を返す)10を返すべきです。

tableView:cellForRowAtIndexPath:は、現在のページ時間10をindexPath.rowプロパティに追加してページングを処理し、ソースビューのどの要素をセルビューに使用するかを決定する必要があります。

[その他]ボタンをタップすると、[self.tableView reloadData];に電話する必要があります。

編集:あなたcellForRowAtIndexPath:方法は、次のようなものになります。

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"TesterCell"; 

    UITableViewCell *cell = [tableView 
     dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 

     cell = [[[UITableViewCell alloc] 
      initWithStyle:UITableViewCellStyleDefault 
      reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSInteger dataIndex = indexPath.row + (pageNumber * 10); 
    MyDataObject *data = (MyDataObject *)[self.arrayThatContainsAllHundredRecords 
     objectAt:dataIndex]; 

    NSString *cellText = data.LastName; // or whatever 

    cell.textLabel.text = cellText; 

    return cell; 
} 
+0

53レコード。その後、ユーザーはmoreボタンを5回クリックし、6番目のインスタンスでは、表には3つのレコードしか表示されません。これは 'tableview:numberOfRowsInSection:'でどのように扱うことができますか(私は質問でこれを言及しませんでした - ごめんなさい)?私は 'cellForRowAtIndexPath'イベントで何をすべきか理解していませんでした。詳細を追加してください。 – sharon

+0

どこから 'pageNumber'が来たのですか? – sharon

関連する問題