2013-01-08 116 views
1

我想在UIView中展示一個UITableViewController,我有一個解決方法,但我想明白爲什麼它的工作方式。如果UITableViewController添加到其他UIView,委派如何工作?

這是該方案的樣子: - 創建一個新的單一視圖應用
- 在IB增加了一個視圖到主視圖
- 創建一個出口的觀點:

@property (weak, nonatomic) IBOutlet UIView *placeholderView; 


- 添加了一個新的帶XIB的UITableViewController到項目
- 更改了numberOfSectionsInTableView返回1,numberOfRowsInSection返回10,cellForRowAtIndexPath:

cell.textLabel.text = @"hello"; 


- 在視圖控制器文件viewDidLoad方法:

ORGTableViewController *tableView = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil]; 

[self.placeholderView addSubview:tableView.tableView]; 

現在的表出現在placeholderView,但它是空的。在TableViewController文件中調用InitWithStyle和ViewDidLoad方法。但是沒有任何numberOfSectionsInTableView,numberOfRowsInSection和cellForRowAtIndexPath被調用。

也試過在AppDelegate中添加此代碼didFinishLaunchingWithOptions方法,它是 - 工作如預期,文字的細胞出現:

ORGTableViewController *tableViewController = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil]; 

self.window.rootViewController = tableViewController; 

所以它的工作原理,它看起來像代表團搞砸了不知何故我加的UITableViewController到UIView的,解決方法是容易...視圖控制器,viewDidLoad方法:

ORGTableViewController *tableViewController = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil]; 
tableViewController.tableView.delegate = tableViewController; 

[self.placeholderView addSubview:tableViewController.tableView]; 

你知道爲什麼代表團以這種方式工作?

THX!

回答

2

你的問題本身就有答案。在第一個代碼中,您沒有像第二個代碼那樣設置代碼,您將代理設置爲tableViewController.tableView.delegate = tableViewController;,該代理將調用tableViewController中實施的代理方法。

如果您計劃在placeholderView課程中實施代理方法,則需要將代表設置爲`tableViewController.tableView.delegate = self;,然後在placeholderView類中實施所有代表。這將會奏效。

如果你只需要一個UITableView,你也可以考慮繼承UITableView類並將其作爲子視圖placeholderView添加。