2013-12-19 63 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