2012-09-09 117 views
1

有問題。我有一個ipad應用程序,它包含一個帶有UITableView的視圖控制器和一個詳細視圖(基本上是另一個視圖控制器來顯示細節)在同一個屏幕上。當執行-didSelectRowAtIndexPath時,我需要將行數據從UITableView傳遞到此詳細視圖。我不知道如何去做這件事?任何幫助/指針/示例代碼如何去做到這一點?將數據從UITableView推送到同一屏幕上的另一個UIViewController

感謝您的幫助提前

回答

1

定義在UITableView的視圖控制器的委託,然後在詳細信息視圖控制器實現它。在調用didSelectRowAtIndexPath時,調用委託方法,將行數據傳遞給詳細視圖控制器。

委託定義看起來像:

@class MyTopLevelViewController; 

@protocol MyTopLevelViewControllerDelegate <NSObject> 

-(void)showDetail:(DetailObject *)detail; 

@interface MyTopLevelViewController : UIViewController 

@property (nonatomic, weak) id <MyTopLevelViewControllerDelegate> delegate; 

@end 

並加入代表到詳細信息視圖控制器頭:

@interface MyDetailViewController : UIViewController <MyTopLevelViewControllerDelegate> 
-1

如果你願意來傳遞數據的另一個視圖控制器上didSelectRowAtIndexPath在同一屏幕上,你可以使用數組,因爲你得到「objectAtIndex:indexPath.row」。以下代碼可能會對您有所幫助:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    DetailFoodViewController *detailFoodViewController=[[DetailFoodViewController alloc] initWithNibName:@"DetailFoodViewController" bundle:nil]; 

    JSCategory *jSCategory=[self.categoryResult.JSCategories objectAtIndex:indexPath.row]; 

    detailFoodViewController.jsCategory=jSCategory; 

    detailFoodViewController.oldStoreLocationId=self.oldStoreId; 

    [self.view addSubview:detailFoodViewController.view]; 
    [detailFoodViewController release]; 

} 
+0

我不同意您呈現新視圖控制器視圖的方式。如果你沒有實現UIViewControllerContainment,那麼以另一種方式控制器添加視圖控制器的視圖作爲子視圖是一個壞主意,會讓事情變得混亂。以模態方式呈現新的viewController或推送它,是從另一個viewController呈現viewController的更好方法。如果有必要採用相同的觀點:使用裝箱。 – J2theC

相關問題