2013-12-19 47 views
2

我想单击一个单元格填充UITableViewController内的UITextFields。所以,我创建像一个init方法:自定义初始化方法不工作

- (id)initWithObjetoFormulario:(ObjetoFormularioGerenciador *)umObjeto 
{ 
    self = [super init]; 
    if(self){ 
     self.objetoFormulario = umObjeto; 
      } 
    return self; 
} 

在我ViewDidLoad我放线if(self.objetoFormulario){和链接后UITextFields我的对象。我认为在这一点上没有任何问题。

所以,我的第二个TableViewController是SearchDisplayController,它找到的数据,我需要和didSelectRowAtIndexPath我:

ObjetoFormularioGerenciador *objeto = [[ObjetoFormularioGerenciador alloc] init]; 
    [objeto RecebeArrayComDadosECriaObjetoFormularioGerenciador:_arrayComDados eEmail: [searchResults objectAtIndex:indexPath.row]]; 

    GerenciarSeriesTableViewController *gerenciador = [[GerenciarSeriesTableViewController alloc] initWithObjetoFormulario:objeto]; 
    [self.navigationController pushViewController:gerenciador animated:NO]; 

由于我没有在我的电池实际的对象,我打电话给一个方法根据单元格条目检索对象,这也正在工作,现在,当我单击单元格时,它会打开一个空白TableView。它应该返回到我的tableView与包含UITextFields的静态单元格并填充它们。

当我使用此代码:

ObjetoFormularioGerenciador *objeto = [[ObjetoFormularioGerenciador alloc] init]; 
[objeto RecebeArrayComDadosECriaObjetoFormularioGerenciador:_arrayComDados eEmail:[searchResults objectAtIndex:indexPath.row]]; 

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
GerenciarSeriesTableViewController *gerenciador = [sb instantiateViewControllerWithIdentifier:@"GerenciarSeriesTableViewController"]; 
[self.navigationController pushViewController:gerenciador animated:NO]; 

它打开的TableView我想要的,但它不填充UITextFields,因为我没有通过任何物体。

谢谢。

+0

'RecebeArrayComDadosECriaObjetoFormularioGerenciador:eEmail'是有史以来最糟糕的方法名称。 – Sulthan

+0

谢谢:)当它是这样的时候,跟踪我正在做的事情更容易。 – Jorge

回答

3

是的,你真的没有定制init视图控制器的方法,而是依赖于标准的方法,然后一旦实例化视图控制器,你只需设置属性,例如:

ObjetoFormularioGerenciador *objeto = ... // create and configure objeto 

GerenciarSeriesTableViewController *gerenciador = [self.storyboard instantiateViewControllerWithIdentifier:@"GerenciarSeriesTableViewController"]; 
gerenciador.objetoFormulario = objeto; 
[self.navigationController pushViewController:gerenciador animated:NO]; 

也可以有两个视图控制器之间SEGUE,给它的识别符,然后调用[self performSegueWithIdentifier:...],然后设置objetoFormularioprepareForSegue方法。但上述技术也应该可以正常工作。

+0

完美,这工作得很好。关于自定义init方法虽然不是经常使用吗?只是好奇。谢谢。 – Jorge

+0

@Jorge在一个基于NIB的项目中,您可以使用自定义的'init'方法(调用标准的'initWithNibName:bundle:')。但在故事板世界中,你经常让故事板或segue实例化视图控制器和子视图,所以使用自定义的'init'方法是没有意义的。但iOS 5引入了'prepareForSegue',让你使用标准的'initWithCoder',但是提供了将数据传递到目标控制器的机制。因此,对于故事板,您通常不会在视图控制器(或任何UIKit子类)中使用自定义的'init'方法。 – Rob