在controller中delegate了UITableViewDataSource
以后,是必须实现这个方法以展示UITableView的。它的方法原型如下
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
能否结合例子具体解释下NSIndexPath
的含义,另外与它想对应的还有一个必须实现的方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
这个section表示的又是什么呢?
PHPz2017-04-21 11:00:06
まずTableViewのレイアウトを説明します。TableViewの内容はSectionとRowの2層になっており、それぞれのRowに対応するビューがTableViewCellとなります。以下に示すように、settings.app を例として取り上げます。
写真には 2 つのセクションがあります
セクション 0 には 6 行があります -- 機内モード~オペレーター
セクション 1 -- Sound~Desktop に 3 つの行が表示されます。
質問にある 2 つの方法について説明しましょう。
リーリー
このメソッドは特定のセルを返します。このセルは、さまざまなカスタマイズされたスタイルでレンダリングしたり、いくつかのデフォルトのスタイルでレンダリングしたりできます。
IndexPath は、レンダリングするセルの位置をマークします。indexPath オブジェクトには、section と row という 2 つの属性があり、特定のセルを見つけることができます。
注: このメソッドは、特定のセルが画面に表示されると呼び出され、一度も表示されない場合は 1 回呼び出されます。セルオブジェクトは画面の表示領域が消えるとリサイクルされ、表示領域に表示される他のセルに再利用されるためです。したがって、このメソッドでセルをレンダリングするときは、for ループなどを使用してセルをクリーンアップすることをお勧めします。
リーリー
このメソッドは、TableView が生成されたとき (または tableView オブジェクトで reloadData が呼び出されたとき) に呼び出され、特定のセクションの行 (セル) の数を返します。
たとえば、settings.app インターフェイスでは、次のようになります
リーリー
PHP中文网2017-04-21 11:00:06
1. NSIndexPath
主要包含(NSUInteger)section
和(NSUInteger)row
,每个row
必然是属于一个section
的,否则这个row
没有意义,- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
里面就是表明各section
有多少row
。
2、打开Contacts
,里面的那些A、B、C...这样的标题就属于section header
,header + rows + footer
就构成了一个完整的section
. 可以通过- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
ヘッダー、フッターも同様にカスタマイズします