2014-05-16 106 views
-2

我目前有一個MatchCenterViewController,我想以編程方式將其轉換爲UITableViewController。我試圖根據我找到的教程來做到這一點,但似乎並沒有出現。如何以編程方式將ViewController轉換爲UITableViewController

MatchCenterViewController.m:

#import "MatchCenterViewController.h" 
#import <UIKit/UIKit.h> 

@interface MatchCenterViewController() <UITableViewDataSource, UITableViewDelegate> 
@end 

@implementation MatchCenterViewController 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"newFriendCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"newFriendCell"]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 
    //etc. 
    return cell; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

@end 
+1

爲什麼不擴展UITableViewController? –

+0

你可以添加一個UITableView並添加UITableViewController代表 – EridB

+1

夥計們,爲什麼你不解釋你爲什麼這樣做而忽略了這個問題?使用任何對象(不僅是視圖控制器)作爲數據源或表視圖的委託都完全「合法」。這就是爲什麼蘋果引入相關協議而不是堅持對某些表數據源超類進行子類化的原因。 UITableViewController只是某種便利類。沒有更多,也沒有少。 –

回答

4

至少,你需要實現以下方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

而且你需要設置委託和數據源,通常在viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.tableView.dataSource = self; 
    self.tableView.delegate = self; 
} 

此外,你需要一個IBOutlet到表如果表視圖是在故事板中創建的,或者如果表視圖是在代碼中創建的,則查看錶視圖的屬性。

+1

+爲表格視圖添加屬性。 –

+0

@ 0x7fffffff你並不需要爲表視圖添加一個屬性。沒有,當然,self.tableView不起作用。但是,如果表格是在IB/Storyboard編輯器中添加的,並且如果視圖控制器作爲數據源和委託連接在那裏,則所有數據源和委託協議方法都會交給tableView的引用,它可以很好地與每個方法。 –

+2

謝謝大家,我在關於連接到表格視圖的答案中添加了一個註釋。 – user3386109

相關問題