2009-08-26 64 views
0

我有一个带有tableviewcontroller的iPhone应用程序。当您单击某个单元格它打开这个代码的新的UIViewController:将数据传递给iPhone上的uiviewcontroller对象

nextViewController = [[avTouchViewController alloc] initWithNibName:@"avTouchViewController" bundle:nil]; 

以上称为avTouchViewController的UIViewController中有一个看起来像一个属性:

IBOutlet SomeObject *controller; 

SomeObject是所有相关的视图属性的对象。

我想从tableviewcontroller传递一个nsstring参数我用someObject初始化avTouchViewController。

我该怎么做?

回答

1

我对你的问题有点困惑;你说你正在创建avTouchViewController当在现有的UITableView内点击一个单元格时,但是最后一部分描述了相反的情况。

基本上,如果你想将信息传递给视图控制器,只要给它,可以设置一个属性(这可能已经是这种情况),例如:

nextViewController = [[avTouchViewController alloc] initWithNibName:@"avTouchViewController" bundle:nil]; 
nextViewController.controller = theInstanceOfSomeObjectIWantToPass; 

您还可能需要重命名你的controller属性。对于读者来说,视图控制器有一个名为controller的属性是没有意义的,它实际上是SomeObject*。同样,您的班级名称应该大写,即使用AvTouchViewController而不是avTouchViewController

0

如果我这样做,我想我自己的初始化添加到我的UIViewController子类:

- (id)initWithController:(NSString *pController) { 
    if (self = [super initWithNibName:@"avTouchViewController" bundle:nil]) { 
     self.controller = pController; 
    } 
    return self; 
} 

然后只需调用以下(在的tableView:didSelectRowAtIndexPath方法:或徘徊无论):

NSString *controller = @"Sample String"; 

AVTouchViewController *nextViewController = [[AVTouchViewController alloc] initWithController:controller]; 
[controller release]; 

[self.navigationController pushModalViewController:nextViewController animated:YES]; 
[nextViewController release]; 

作为一种风格,类名通常以大写字母开头(因此我改为AVTouchViewController)。

+0

我过去喜欢这种方法(来自强大的C++背景,并不喜欢Cocoa要求所有类都具有默认构造函数),但几个月前我停止使用它。我认为Cocoa代码更像Cocoa开发人员所期望的那样更好。这包括使用默认的inits,并使用参数来设置值。 – 2009-08-27 00:13:35