代码之家  ›  专栏  ›  技术社区  ›  user1657861

将数据从UITableView推送到同一屏幕上的另一个UIViewController

  •  1
  • user1657861  · 技术社区  · 14 年前

    有个问题。我有一个ipad应用程序,它包含一个带有 UITableView 以及在同一屏幕上的细节视图(其基本上是显示细节的另一视图控制器)。我需要从传递行数据 UI表格视图 -didSelectRowAtIndexPath 对该详细视图执行。我不知道该怎么做?关于如何做到这一点,有什么帮助/指针/示例代码吗?

    感谢您提前提供的帮助

    2 回复  |  直到 14 年前
        1
  •  1
  •   bobnoble    14 年前

    在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>
    
        2
  •  -1
  •   J2theC    14 年前

    若您愿意在同一屏幕上的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];
    
    }