在我的應用程序中,我想在單個ViewController
中使用3個tableviews。問題是我怎樣才能單獨使用UITableViewDelegate
方法。例如;我可以分別使用cellForRowAtIndexPath
方法爲每個UITableView
添加標籤。但是,我不知道如何針對每個tableview使用不同的numberOfRowsInSection
或numberOfSectionsInTableView
方法。可能嗎?在視圖控制器中使用多個tableviews時使用委託方法
1
A
回答
4
請在YourViewController.h 3個UITableView
變量:
YourViewController : UIViewController
{
UITableView* tableView1;
UITableView* tableView2;
UITableView* tableView3;
}
YourViewController.m:
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == tableView1)
{
//Your code
}
if (tableView == tableView2)
{
//Your code
}
if (tableView == tableView3)
{
//Your code
}
}
2
您不應該使用單獨的委託方法。相反,像cellForRowAtIndexPath
每個代理方法,你應該確定你的表作爲
if(tableview == TableView1)
{
}
else if(tableview == TableView2)
{
}
else
{
}
等。這是正確的方法,因爲您操作的表將具有通用的委託方法,然後您只需指定表的名稱。
1
當然:
所有的tableview委託函數具有的tableView作爲第一個參數,因此,所有你需要做的就是保持跟蹤的三點表意見,並在每個代表功能檢查該表中查看委託電話是for:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(tableView == firstTableView) {
...
}
else if (tableView == secondTableView) {
...
}
else if (tableView == thirdTableView) {
...
}
}
0
在所有委託和數據源方法中,第一個參數是對tableview對象的引用。所以你總是可以區分你的桌面。
4
對數據源和委託方法中的所有帶有條件的表只使用一個dataSource和Delegate方法。
- (NSInteger)numberOfRowsInSection:(NSInteger)section;
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section;
{
if (tableView==tabl1) {
return [arr1 count];
}
if (tableView==tabl2) {
return [arr2 count];
}
if (tableView==tabl3) {
return [arr3 count];
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier ];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
cell.backgroundColor=[UIColor clearColor];
}
if (tableView==tabl1) {
cell.textLabel.text = [arr1 objectAtIndex:indexPath.row];
}
if (tableView==tabl2) {
cell.textLabel.text = [arr2 objectAtIndex:indexPath.row];
}
if (tableView==tabl3) {
cell.textLabel.text = [arr3 objectAtIndex:indexPath.row];
}
return cell;
}
0
在ViewController.h
{
NSArray *arr1;
NSArray *arr2;
NSArray *arr3;
}
@property (nonatomic, retain) IBOutlet UITableView *tbl1;
@property (nonatomic, retain) IBOutlet UITableView *tbl2;
@property (nonatomic, retain) IBOutlet UITableView *tbl3;
不要忘記將此Properites與XIB's
UITableView實例連接起來。
在ViewController.m
@synthesize tbl1, tbl2, tbl3;
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
if (tableView == tbl1)
return [arr1 count];
if (tableView == tbl2)
return [arr2 count];
if (tableView == tbl3)
return [arr3 count];
return 0;
}
我希望我幫你。
0
您也可以創建三個表視圖控制器類(以防每個表視圖在其單元顯示邏輯中涉及一點複雜性)。將它們添加爲[self addChildViewController:(Your Controller Class)
,然後將下一行[self.view addSubview:(Your Controller Class' view)]
與視圖調整爲您要設置的框架。
1
相關問題
- 1. 使用委託給視圖控制器
- 2. CLLocationManager委託/多個視圖控制器
- 3. 從視圖控制器類中調用委託方法
- 4. 從應用程序委託調用視圖控制器方法
- 5. 在同一視圖控制器中使用2個tableviews(swift3)
- 6. UIView類有太多委託方法父視圖控制器?
- 7. UIAlertView中的委託方法在兒童視圖控制器
- 8. 使用應用委託更新視圖控制器的變量
- 9. 爲什麼你需要在一個視圖控制器中使用委託?
- 10. 視圖控制器委託返回無
- 11. 無法將詳細視圖控制器委託給主視圖控制器
- 12. 如何使用委託在2個視圖控制器之間進行通信?
- 13. iOS委託問題與多個視圖控制器
- 14. Xcode的應用程序委託給每個視圖控制器
- 15. 如何從應用程序委託和/或其他視圖控制器訪問多個視圖控制器?
- 16. 當在UITableviewCell中使用UICollection視圖時不調用UICollectionView委託方法「didSelectItemAtIndexPath」
- 17. 更改一個視圖控制器的值從另一個視圖控制器使用自定義委託在其他視圖控制器NSSdictonary
- 18. 從tableView委託類中調用視圖控制器segue
- 19. iOS4中的應用程序委託和視圖控制器
- 20. 如何使用委託方法在兩個視圖控制器之間傳遞對象?
- 21. 從另一種方法調用圖像選擇器控制器委託方法
- 22. 調用多個控制器方法在視圖中
- 23. 表視圖委託方法不在故事板中的新視圖控制器中調用
- 24. 使用協議和委託在視圖控制器之間傳遞數據
- 25. 委託方法不傳遞數據到第二個視圖控制器
- 26. 我可以在視圖控制器而不是委託類中使用tabbar控制器嗎?
- 27. 從一個視圖控制器到另一個視圖控制器進行委託調用
- 28. 在單個視圖控制器中使用多個nib文件?
- 29. 如何在多個視圖控制器中使用一個xib?
- 30. 視圖控制器不是從應用程序委託呈現
如是,感謝編輯! – 2013-02-20 13:07:07