Looking for uitableview Answers? Try Ask4KnowledgeBase
Looking for uitableview Keywords? Try Ask4Keywords

uitableviewuitableviewを使い始める


備考

このセクションでは、uitableviewの概要と、開発者がそれを使いたい理由について概説します。

それはまた、uitableview内の大きなテーマを言及し、関連トピックにリンクする必要があります。 uitableviewのドキュメントは新しくなっているので、それらの関連トピックの初期バージョンを作成する必要があります。

デリゲートとデータソースのメソッド:

各テーブルビューには、デリゲートとデータソースが必要です。

デリゲートメソッド

デリゲートメソッドは実際には必要ありませんが、テーブルセルの接触を処理するにはtableView:didSelectRowAtIndexPath:を実装する必要があります。

そして、他の方法は...

// Display customization

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

// Variable height support

// If these methods are implemented, the above -tableView:heightForXXX calls will be deferred until views are ready to be displayed, so more expensive logic can be placed there.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

// Section header & footer information. Views are preferred over title should you decide to provide both

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;   // custom view for header. will be adjusted to default or specified header height
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;   // custom view for footer. will be adjusted to default or specified footer height

// Accessories (disclosures). 

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

// Selection

// Called before the user changes the selection. Return a new indexPath, or nil, to change the proposed selection.
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;
// Called after the user changes the selection.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;


// Editing

// Allows customization of the editingStyle for a particular cell located at 'indexPath'. If not implemented, all editable cells will have UITableViewCellEditingStyleDelete set for them when the table has editing property set to YES.
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

// Controls whether the background is indented while editing.  If not implemented, the default is YES.  This is unrelated to the indentation level below.  This method only applies to grouped style table views.
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath;

             

// Indentation

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath; // return 'depth' of row for hierarchies
 

データソース必須メソッド:

データソースからは、tableView:numberOfRowsInSection:およびtableView:cellForRowAtIndexPath:のメソッドが必要です。テーブルがグループ化されたテーブルの場合は、numberOfSectionsInTableView:も実装する必要があります。

必要なメソッド : -

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

// Row display.

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

オプションのメソッド : -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;              // Default is 1 if not implemented

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // fixed font style. use custom view (UILabel) if you want something different
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

// Editing

// Individual rows can opt out of having the -editing property set for them. If not implemented, all rows are assumed to be editable.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

// Moving/reordering

// Allows the reorder accessory view to optionally be shown for a particular row. By default, the reorder control will be shown only if the datasource implements -tableView:moveRowAtIndexPath:toIndexPath:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

// Index

- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView;                                                    // return list of section titles to display in section index view (e.g. "ABCD...Z#")
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;  // tell table which section corresponds to section title/index (e.g. "B",1))

// Data manipulation - insert and delete support

// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change
// Not called for edit actions using UITableViewRowAction - the action's handler will be invoked instead
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

// Data manipulation - reorder / moving support

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
 

テーブルセルの解剖

デフォルトのUITableViewCellには、いくつかの標準データビューとサブビューがあります。

  • cell.textLabel - セルのUILabel
  • cell.detailTextLabel - テキストラベルの下に表示される小さなUILabel
  • cell.imageView - セルの左側にあるUIImageView

オプションのアクセサリビューには、次のいずれかのアイコンが表示されます。デフォルトのaccessoryTypeはUITableViewCellAccessoryNoneです。

UITableViewの詳細

UITableViewとは何ですか?

UITableView は、最も頻繁に使用されるユーザーインターフェイスオブジェクトで、複数の行のスクロール可能な リストにデータを1列で表示し、セクションにも分割できます。垂直スクロールのみが可能で、 UIScrollView サブクラスです。

なぜ私たちはUITableViewを使用しますか?

UITableView を使用して、選択可能なオプションの リストを表示したり階層構造のデータをナビゲートしたりアイテムのインデックス付きリストを表示したり、 セクションを使用して視覚的に異なるグループに詳細情報やコントロールを表示することができます

連絡先やメーリングリストなどでUITableView を使用することができます。これはテキストデータの表示に使用されるだけでなく、YouTubeアプリなどのテキストもテキストとともに表示できます。

ストーリーボードを使用してUITableViewをセットアップまたはインストールするための詳しい手順。

  1. Single Viewアプリケーション用のシンプルなプロジェクトを作成します。
  2. オブジェクトライブラリで、 "テーブルビュー"オブジェクトを選択し、ビューコントローラのビューにドラッグします。プロジェクトを実行するだけで、空白のページが表示されます。
  3. コンテンツを含むスクロール可能なビューが必要な場合は、 UIViewUITableView にドラッグし、サイズを調整し、残りのUIElementsを要件ごとにそのビューにドラッグします。しかし、同様の形式のリストを表示したい場合は、 UITableViewCell を使用しUITableViewCell
  4. UITableViewCell クラスは、UITableViewオブジェクトに表示されるセルの属性と動作を定義します。このクラスには、セルの内容と背景(テキスト、画像、およびカスタムビューを含む)の設定と管理、セルの選択と強調表示の状態の管理、アクセサリビューの管理、およびセルコンテンツの編集の開始のためのプロパティとメソッドが含まれます。
  5. UITableViewCell を使用する際の最もUITableViewCell な部分は再利用性です。 dequeueReusableCellWithIdentifierの目的は少ないメモリを使用することです。たとえば、1000エントリのリストがあり、一度に10エントリしか表示されない場合、可視セルのみがメモリに割り当てられ、残りはユーザがリストをスクロールするときと同じように再利用されます。 UITableViewCell をドラッグしてtableViewにドロップするだけです。それから、セル - >属性インスペクタ - >テーブルビュースタイルをカスタムと識別子に設定をクリックして、myCellと言うユニークなものをクリックします。
  6. オブジェクトが別のオブジェクトにデータを与えるように、データソースに準拠させる必要があります。たとえば、 UITableViewDataSource プロトコルには、cellForRowAtIndexPathやnumberOfRowsInSection などのメソッドがあり、テーブルに表示する内容を指定します。代理人型オブジェクトは、別のオブジェクトが取るアクションに応答します。たとえば、 UITableViewDelegate プロトコルには、ユーザーが表内の特定の行を選択したときにアクションを実行するためのdidSelectRowAtIndexPath などのメソッドがあります。 7.データソースに準拠する場合は、必要なメソッドを実装する必要があります。
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
        // Here you need to give the total number of items you want to list. For example if you want list of 2 numbers, then:

           return 2; 

 }
 

そして

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

//Here you need to dequeue the reusable cell which we discussed in point 5. Then you can modify your cell here according to you and customize it here as per your requirement. Here the call comes for numberOfRows number of times. 

static NSString *cellIdentifier = @"cellID";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
cellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:
    UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
} 
if(indexPath.row){
    [cell.textLabel setText:"1"];
}else{
    [cell.textLabel setText:"2"];
}

return cell;
}
 
  1. また、NSIndexPathについて: - NSIndexPathクラスは、ネストされた配列コレクションのツリー内の特定のノードへのパスを表します。このパスはインデックスパスと呼ばれます。オブジェクトの長さは常に2です。たとえば、テーブルビューセルのインデックスに使用されます。 NSIndexPathオブジェクトの最初のインデックスはセクションと呼ばれ、2番目のインデックスは行です。セクション0および行0を持つ索引パス・オブジェクトは、最初のセクションの最初の行を示します。インデックスパスをすばやく作成するには、 [NSIndexPath indexPathForRow:inSection:] を使用します。