将变量(或类似)传递给新加载的视图

时间:2010-08-23 12:16:45

标签: objective-c iphone cocoa-touch

我正在为一个小型iPhone应用程序加载新视图,并想知道如何将细节从一个传递到另一个? 我正在加载一个包含来自和xml文件的数据的tableview,然后一旦点击就会通过以下方式引入新视图:

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

    SubInfoViewController *subcontroller = [[SubInfoViewController alloc] initWithNibName:@"SubInfoView" bundle:nil];
    [self presentModalViewController:subcontroller animated:YES];
    [subcontroller release];

}

下一步是告诉新加载的视图刚刚加载了哪一行? 任何想法,想法超过欢迎,请温柔的大新手...

2 个答案:

答案 0 :(得分:3)

我通常会创建自己的init方法来执行此类操作。我认为传递tableView行所代表的相应“模型”对象而不是行号本身可能会更好,如下所示:

在SubInfoViewController.h中

@interface SubInfoViewController : UIViewController {
    YourObject *yourObject;
}

@property (nonatomic, retain) YourObject *yourObject;

然后在SubInfoViewController.m中:

- (SubInfoViewController*)initWithYourObject:(YourObject*)anObject {
   if((self = [super initWithNibName@"SubInfoView" bundle:nil])) {
       self.yourObject = anObject;
   }
   return self;
}

您可以通过这种方式创建和展示它:

// assuming you've got an array storing objects represented 
// in the tableView called objectArray

SubInfoViewController *vc = [[SubInfoViewController alloc] initWithYourObject:[objectArray objectAtIndex:indexPath.row]];
[self presentModalViewController:vc animated:YES];
[vc release];

这可以非常容易地进行调整,以允许您传入任何类型的对象或值(例如,如果您仍想这样做,则为行号)。

答案 1 :(得分:0)

将一个实例变量添加到视图控制器并声明一个与之对应的属性,因此在分配之后初始化它,将其设置为subcontroller.foo = Blah Blah。