2011-07-19 7 views
2

私は興味があります。 IBでは、tableviewcontrollerを置くことができます。しかし、私が知る限り、私たちは常にそのテーブルビューアコントローラをサブクラス化していますか?このようにしてデリゲートなどを実装することができます。サブクラス化せずにTableViewControllerを使用する人はいますか?

しかし、いくつかの「デフォルト」の動作では、IPhoneはtableviewcontrollerをそのまま使用することを意図していたようです。さもなければ、IBはなぜそれのようなtableViewControllerを置くのでしょうか?

人がサブクラス化せずにtableViewControllerを使用するサンプルコードはありますか?

どこの細胞を描画するのかなど、どこでそれらを実装していますか?


質問の正しい答えは、サブクラス化なしでUITableViewControllerを使用するのは単なるばかげたことだと思います。体はそれをやっていません。私が間違っていれば私を修正してください。ただ興味があるだけ。

+0

はい。サブクラス化せずにuitableviewを使用できます。 – Maulik

答えて

3

UITableViewControllerまたはUIViewControllerのサブクラスを使用するかどうかにかかわらず、テーブルが表示されるデータを設定する必要があります。それ以外の場合は、空白のテーブルのポイントは何ですか?そのためには、いくつかのメソッドをサブクラス化して実装する必要があります。複雑さが実際に異なるクラスを要求しない限り、デリゲートとデータソースを同じコントローラに保つことも良い考えです。

私はいつも独自のテーブルコントローラをUIViewControllerのサブクラスとして作成し、テーブルコントローラメソッドを自分で実装しています。なぜなら、より柔軟性があるからです。 Matt Gallagherには、その理由と理由がいくつか掲載されています。 UITableView construction, drawing and management (revisited)を参照してください。

あなたは、それを試してみるXIBでUIViewControllerのサブクラスを作成し、次のサンプルコードを追加したい場合は、次の

// interface 
#import <UIKit/UIKit.h> 
@interface SettingsVC : UIViewController <UITableViewDelegate, UITableViewDataSource> 
@property (nonatomic, retain) IBOutlet UITableView *tableView; 
@property (nonatomic, retain) NSMutableArray *array; 
@end 

// implementation 
@synthesize tableView = _tableView; 
@synthesize array = _array; 
# pragma mark - UITableViewDataSource 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.array count]; 
} 
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    int row = [indexPath row]; 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.textLabel.text = [self.array objectAtIndex:row]; 
    return cell; 
} 

を次にXIBにUITableViewオブジェクトを追加するには、コントローラのtableViewをリンクUITableViewオブジェクトにデリゲートし、UITableViewのデリゲートとデータソースをコントローラにリンクします。

1

私はがあるとして、あなたがUITableViewControllerを使用することができるとは思わない、それはそれをサブクラス化せずにUIViewControllerを使用してようなものだ:あなたは、任意の内部力学を設定することはできません。

UITableViewControllerを使用せずにUITableViewにすることができます。

+0

私はそれを知っています。だからuitableviewcontrollerを追加するのは何ですか? –

+1

これは、NIBを設計したり毎回同じコードを書き直すことなく、UITableViewだけを含むUIViewControllerを持つためです。これは単にUIViewControllerの特殊バージョンです – scalbatty

+0

ドキュメントには、「管理したいテーブルビューごとにUITableViewControllerのカスタムサブクラスを作成します。だから、あなたは 'UITableView'を直接使うのではなく、毎回それをサブクラス化する必要があると思います(それは意味があります)http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class /Reference/Reference.html – scalbatty

2

いいえ、これはtableViewControllerでクラスを継承する必要はありません。 TableViewControllerをxibに配置するだけで、テーブルビューを使用できます。

ファイルの所有者に代理人とデータソースを設定すると、表のセルを描画できます。

+0

tableViewControllerではなく、ファイルの所有者にデリゲートとデータソースを設定すると、tableViewControllerを持つポイントは何ですか?なぜ単にテーブルビューを追加しないのですか?私はそれがいくつかのポイントを持つことができますが、私たちは、元の質問に戻ることを意味するtableViewControllerをサブクラス化する場合のみ。 –

+0

私は質問は "あなたがそれをサブクラス化せずにUITableViewControllerを使用したい場合はありますか"と思う。 – scalbatty

+0

@ジム・チオ、あなたがUITableViewでクラスを継承したら、デリゲートとデータソースメソッドを呼び出すとは思いません。私たちがナビゲーションベースのアプリケーションを作成する場合、デフォルトではrootViewはtableViewであり、クラスはUITableViewで継承されます。また、データソースのconnectinと、delegateおよびデータソースの所有者としてクラスを作成するクラスowner.soを持つdelegateもあります。 – Ishu

1

もちろん、サブクラス化せずにUITableViewControllerを使用することができます。

サンプルコードは非常に簡単で簡単です。

このような例

- (IBAction)selectSomeOption:(id)sender { 
    UITableViewController *tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
    tableViewController.tableView.dataSource = self; 
    tableViewController.tableView.delegate = self; 
    tableViewController.title = "Select some option"; 
    [self.navigationController pushViewController:tableViewController animated:YES]; 
} 

とUITableViewDatasourceとデリゲートメソッドは、同じクラスに入ります。

確かに、痛みが気に入ったら、コードでUIViewControllerを作成し、独自にtableViewを追加することができます。
このような簡単なタスクのサブクラスを作成します。

サブクラス化されていないUITableViewControllerを使用すると便利なことがあります。

関連する問題