2013-03-25 42 views
2

我想兩個視圖控制器之間以及周圍的一切令人費解的方式,我想習慣的最簡單,最直接的方式搜索後移至一個NSString是寫在接受VC的initWithName函數和調用它發送VC。它確實成功地移動了它,但是我希望它在ViewDidLoad加載textViewer之前執行,以便它在按下Tab鍵後立即顯示。下面是從發送VC代碼:在ViewDidLoad之前執行InitWithName可能嗎?

- (void)textViewDidEndEditing:(UITextView *)textView 
{ 
    if ([textView.text isEqualToString: @""]) { 
     textView.text = @"*Paste the machine code in question here*"; 
    } 
    SecondViewController *theVCMover = [[SecondViewController alloc] initWithName: textView.text]; 
    [self.navigationController pushViewController:theVCMover animated:YES]; //Is this really necessary if I'm not going to segue it directly, I'm just waiting for the user to press the next tab 
    gotItLabel.text = @"Got it! Ready for action..."; 
} 

下面是在接收VC代碼:你不能(可靠)上的一個實例調用方法直到init執行完畢

- (id)initWithName:(NSString *)theVCMovee { 
    self = [super initWithNibName:@"SecondViewController" bundle:nil]; 
    if (self) { 
     rawUserInput = theVCMovee; 
     CleanerText.text = rawUserInput; 
    } 
    return self; 
} 
- (void)viewDidLoad { 
     [super viewDidLoad]; 
    CleanerText.text = rawUserInput; 
     NSLog(@"Got the other tab's text and it's %@ ", rawUserInput); 

} 
+0

視圖加載後'viewDidLoad'被調用,該視圖第一次加載的東西嘗試訪問它,就像調用'viewController.view',或有一個父視圖控制器佈局它的子(或窗口顯示其根視圖控制器的視圖)。所以只要你不嘗試自己訪問'view'屬性,並且屏幕上還沒有佈局,你應該可以安全地設置你需要的所有參數,然後調用'viewDidLoad'(即'init ...'和'push ...' – Guillaume 2013-03-25 16:52:52

+0

您是否正在使用自動引用計數(ARC),以及如何定義'rawUserInput'(我們可以看到.h?) – NSGod 2013-03-25 16:54:56

+0

是的,使用ARC,在這裏你去: 「@property(強,非原子)的NSString * rawUserInput;」 – 2013-03-25 17:42:55

回答

0

,所以這種模式是「安全的」,它是如何工作的。

1

你的代碼大部分是好的,但你會發現,當你有你不一定要編寫自定義的初始化做屬性設置的每一點更復雜的視圖控制器。請注意,如果CleanerText是,你從你的筆尖加載UI元素,它並不能幫助設置CleanerText.text在您的init方法,它不加載,直到-viewDidLoad被調用。

你不必做的一切在初始化,不過,如果你對rawUserInput或者您要設置其他變量聲明屬性。然後,您可以去:

SecondViewController *theVCMover = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
theVCMover.rawUserInput = textView.text; 
theVCMover.otherProperty = otherValue; 
.... 

而且你的代碼的其餘部分的工作原理相同。

+0

好吧,感謝多個移動器位上的提示,但是又一次,如何在用戶加載標籤後立即將移動的字符串加載到textViewer中?我只需創建一個「加載」按鈕,除了我想要學習的東西外因爲這對我來說似乎很重要, – 2013-03-25 17:40:15

+0

我也試着直接使用「theVCMover.CleanerText.text = textView.text;」移動字符串,但是再次沒有任何東西。這看起來很正常,或者是我的代碼有問題嗎? – 2013-03-25 17:42:15

+0

此代碼很好。如果你沒有看到你期望的文字,那麼問題就是其他問題。 'CleanerText'是一個連接在'SecondViewController.xib'中的'IBOutlet'? – 2013-03-25 18:41:05

相關問題