2014-09-04 50 views
-1

我試圖以編程方式創建UITableView,但它讓我迷惑,因爲UITableViewDataSource的協議的實現方法永遠不會被調用UITableViewDataSource實現的方法,不叫

的ViewController

@interface viewController : UIViewController <UITableViewDataSource> 
@end 

#import "viewController.h" 

@interface viewController() 
@property (strong, nonatomic) NSArray *tweetsArray; 
@end 

@implementation viewController { 
    UITableView *tableView; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    self.tweetsArray = [[NSArray alloc] initWithObjects: 
         @"This is the first line", 
         @"This is the second line", 
         @"This is the third line", 
         @"This is the fourth line", 
         @"This is the fifth line", 
         nil]; 

    tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; 

    tableView.dataSource = self; 

    [self.view addSubview:tableView]; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.tweetsArray count]; 
} 

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

    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    } 

    NSString *tweet = [self.tweetsArray objectAtIndex:indexPath.row]; 
    [cell.textLabel setText:@"Via Cuong Doan"]; 
    [cell.detailTextLabel setText:tweet]; 

    return cell; 
}  
@end 

的AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    viewController *view = [[viewController alloc] init]; 
    [self.window addSubview:view.view]; 
    return YES; 
} 

一切看起來正常,但-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath永遠不會叫

+0

是ViewDidLoad被調用嗎?我相信不是 – Injectios 2014-09-04 14:49:09

+0

'viewDidLoad'被調用,但其他兩個不是,這就是爲什麼它讓我困惑 – 2014-09-04 14:49:54

+1

'numberOfSecion'沒有設置? – Larme 2014-09-04 14:52:31

回答

2

您需要didFinishLaunchingWithOptions創建的窗口,你也不要手動控制器的視圖添加到窗口,你應該控制窗口的根視圖控制器,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    ViewController *view = [[ViewController alloc] init]; 
    self.window.rootViewController = view; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
0

你嘗試:

@interface viewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

在第一線?

+1

這隻會修復編譯器警告,並且在運行時不起作用。 – rmaddy 2014-09-04 14:53:33

0

添加以下內容:

tableView.delegate = self; 
+1

這不會有幫助 - 有問題的方法是dataSource的一部分,而不是委託。 – rmaddy 2014-09-04 14:53:54