2016-04-11 4 views
1

У меня есть два вида, actualView и nextView. Фактически в actualView я хотел бы открыть nextView и передать некоторые свойства (например, nextView.date = actualView.date) и убить actualView.Как открыть новый вид и убить его?

Хотелось бы узнать, возможно ли это?

Я использовал этот код:

NSLog(@"Views : %@",self.navigationController.viewControllers); 

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 
FormViewController *formView = (FormViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"formView"]; 
formView.delegate = self; 
[self presentViewController:formView 
        animated:YES 
       completion:nil]; 

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

Когда я использую self.navigationController.viewControllers в этом "actualView", он знает, где он находится:, , но когда я использую self.navigationController.viewControllers в actualView, это (null) ... Может быть, проблема с делегатом?

+0

Google 'SEGUE'? – zcui93

+0

Проблема с segue заключается в том, что она открывает представления, не убивая их. – Claudio

ответ

1

Вы можете соединить два вида с нынешним моделями, которые убьют фактический вид и перейдут к следующему виду. Это объясняется довольно красиво здесь https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/StoryboardSegue.html

Что касается передачи значений от одного вида к другому проверить эту функцию:

переопределение Func prepareForSegue (SEGUE: UIStoryboardSegue, отправитель: AnyObject) {

if (segue.identifier == "segue identifier connecting the 2 views") { 

     let viewController = segue.destinationViewController as! UINavigationController 
     let detailview = viewController.topViewController as! nextViewViewController 

     detailview.element defined in nextview = value to send 

}

Есть много примеров можно найти в Интернете с выполнение segue с идентификатором. Это очень распространенный вопрос.

0

Вы можете использовать модальный SEGUE. Таким образом, фактический просмотр будет удален, когда вы перейдете к nextView.

0

я не нашел более простой способ, чем это:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 
UIViewController *sourceViewController = self; 
UIViewController *destinationController = [mainStoryboard instantiateViewControllerWithIdentifier: @"View3"]; 
UINavigationController *navigationController = sourceViewController.navigationController; 

// Pop to root view controller (not animated) before pushing 
[navigationController popToRootViewControllerAnimated:NO]; 
[navigationController pushViewController:destinationController animated:YES]; 
Смежные вопросы