2011-07-19 76 views
2

我只是好奇。在IB中,我們可以放置一個tableviewcontroller。但是,據我所知,我們總是將該tableview控制器的子類化爲正確的?這樣我們可以實現委託等。是否有任何人使用TableViewController沒有子類?

但是,似乎對於某些「默認」行爲,iPhone使用tableviewcontroller作爲is使用。否則,爲什麼IB會讓我們把tableViewController這樣呢?

有沒有任何示例代碼的人使用tableViewController沒有子類?

他們在哪裏實現像繪製什麼樣的單元格等東西?


我想這個問題的正確答案是,沒有子類使用UITableViewController是很荒謬的。沒有人正在這樣做。如果我錯了,請糾正我。我只是好奇。

+0

YES..you可以使用的UITableView沒有子 – Maulik

回答

3

無論您使用的是UITableViewController還是UIViewController的子類,您都需要設置表格要顯示的數據,否則,空白表格的意義何在?爲了實現這一點,你必須繼承並實現一些方法。將委託和數據源保存在同一個控制器中也是一個好主意,除非複雜性真的需要不同的類。這就是說,我總是創建自己的表控制器作爲UIViewController的子類,並自己實現表控制器方法,因爲它給了你更多的靈活性。馬特加拉格爾有幾個職位,如何和爲什麼。見UITableView construction, drawing and management (revisited)

如果你想給它一個嘗試,創造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; 
} 

然後添加一個UITableView對象到廈門國際銀行,鏈接控制器的tableViewUITableView對象,並將代理和UITableView的數據源鏈接到控制器。

1

我不認爲你可以使用UITableViewController,它就像使用UIViewController沒有繼承它:你可以不設置任何內在的機制。

但是你可以有UITableView而不使用UITableViewController

+0

我知道。那麼添加uitableviewcontroller有什麼意義? –

+1

這是爲了讓UIViewController僅包含一個UITableView,而不必每次都設計一個NIB並重寫相同的代碼。它只是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有什麼意義呢?爲什麼不只是添加tableview?我想它可以有一點,但只有我們繼承tableViewController,這意味着回到原來的問題。 –

+0

我認爲這個問題是「是否有任何情況下,你想使用UITableViewController沒有繼承它」。 – scalbatty

+0

@Jim Thio,我不認爲如果你用UITableView繼承你的類,那麼它會調用delegate和data sorce方法。在我們製作基於導航的應用程序的情況下,默認情況下,rootView是tableView,並且類是使用UITableView繼承的,它也有連接數據源和委託類的owner.so,使得類作爲委託和數據源的所有者是完全不同的。 – Ishu

1

當然你可以使用UITableViewController而不需要繼承它。

Samplecode非常簡單直接。

例如像這樣:

- (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有時很方便。

相關問題