2017-02-13 106 views
1

之間傳遞的價值觀,我有兩個UIViewControllers:TimerViewControllerEfficiencyViewController(爲簡單起見,我們會打電話給他們TVC和EVC)初始化和ViewControllers

我試圖通過某些值(2個NSString對象, 1 NSTimeInterval),當按下按鈕時,從TVC到EVC。 EVC需要初始化並在按下按鈕時彈出。總體而言,我嘗試了兩種方法。

1.直接傳遞值(在TVC)

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
EfficiencyViewController *efficiencyViewController = [storyboard instantiateViewControllerWithIdentifier:@"EfficiencyView"]; 
efficiencyViewController.category = _categoryLabel.text; 
efficiencyViewController.desc = _descriptionTextField.text; 
efficiencyViewController.duration = [_timer getInterval]; 
efficiencyViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentViewController:efficiencyViewController animated:YES completion:NULL]; 

問題:當我實例EVC,我在TVC保持的值被複位,所以基本上沒有數據被傳遞。 (我想這是因爲EVC實際上是在屏幕上彈出)

2.構建一個自定義的init方法

TVC

EfficiencyViewController *efficiencyViewController = [[EfficiencyViewController alloc] initWithName:_categoryLabel.text desc:_descriptionTextField.text duration:[_timer getInterval]]; 
[self presentViewController:efficiencyViewController animated:YES completion:NULL]; 

EVC initWithName方法實現

- (id)initWithName:(NSString *)category desc:(NSString *)theDesc duration:(NSTimeInterval)theDuration { 
// self = [super initWithNibName:@"EfficiencyViewController" bundle:nil]; 
if (self != nil) { 
    _category = category; 
    _desc = theDesc; 
    _duration = theDuration; 
} 
return self; 
} 

問題:這些值根本沒有被傳遞。而且這樣,EVC缺少一些主要組件,例如按鈕和文本標籤。

+0

我不確定[視圖控制器之間傳遞數據](http://stackoverflow.com/q/5210535/643383)完全重複,但它應該有所幫助。你的問題的一半似乎源於你自己實例化視圖控制器。當然可以,但是你在上游游泳。 @ NRitH建議使用segues是首選路線。 – Caleb

回答

1

如果在故事板有這些,你應該用故事板SEGUE,並在TVC的prepareForSegue(),你得到的目的地視圖控制器(即EVC)來自segue對象,這就是您設置EVC屬性的位置。

0
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" 
bundle:nil]; EfficiencyViewController *efficiencyViewController = 
[storyboard 
instantiateViewControllerWithIdentifier:@"EfficiencyView"]; 
efficiencyViewController.category = _categoryLabel.text; 
efficiencyViewController.desc = _descriptionTextField.text; 
efficiencyViewController.duration = [_timer getInterval]; 
efficiencyViewController.modalTransitionStyle = 
UIModalTransitionStyleCoverVertical; 

使用自我代替_,看到這個鏈接https://stackoverflow.com/a/30901681/4912468

+0

嗯..我明白了。我選擇使用_的原因是因爲可讀性。不會使用自我。阻礙你的代碼的可讀性?你怎麼看? – besnuj