2015-08-25 2 views
1

У меня есть контроллер просмотра, в котором пользователь кратковременно нажимает кнопку и переходит к второму представлению, и я хочу передать ему некоторые данные, но во втором представлении есть контроллер просмотра навигации, поэтому prepareForSegue() здесь не работает. Должен ли я передавать данные в режим навигации, а затем во второй просмотр или делать что-то еще?Как передать данные с ViewController для встраивания View Controller

+0

Ваши данные крупные? –

+0

Я думаю, http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers он может вам помочь. – JWC

ответ

4

В соответствии с этим: https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UINavigationController_Class/#//apple_ref/occ/instp/UINavigationController/topViewController , следующее решение является более правильным: использовать "topViewController" в UINavitaionController.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    let segueID = segue.identifier ?? "" 

    switch segueID 
    { 
     case "toMyNextVC": 
      let nc = segue.destinationViewController as! UINavigationController 
      let destinationVC = nc.topViewController as! MyNextViewController 
      destinationVC.varToPass = myVarToPass 

     default: 
      break 
    } 
} 
+0

Человек, вы заслуживаете больше голосов! –

0
-(IBAction)moveToSecondViewButtonClicked:(UIButton*)sender { 
    SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    secondViewController.data = data; 
    [self.navigationController pushViewController:secondViewController animated:YES]; 
} 
0

Если размер данных является умеренным, вы можете использовать NSNotificationCenter для передачи данных.

Sender Класс

- (void)sendNotification { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:YOUR_DATA]; 
} 

приемника класс

- (void)viewDidLoad { 
    [[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(receiveNotification:) 
     name:@"myNotification" 
     object:nil]; 
} 

- (void)receiveNotification:(NSNotification *)notification 
{ 
    if ([[notification name] isEqualToString:@"myNotification"]) { 

     //doSomething here. 
    } 
} 

Надеется, что это помогает

0

Dont SEGUE от вашего ViewController к UIViewController. вы должны перевести viewcontroller в UINavigationController нового UIViewController. Вы можете передавать данные в методе prepareForSegue.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
// Get the new view controller using segue.destinationViewController. 
// Pass the selected object to the new view controller. 

    if segue.identifier == "showNavigationController"{ 
     let navController : UINavigationController = segue.destinationViewController as! UINavigationController 
     let viewController : UIViewController = navController.viewControllers[0] as! UIViewController 
     viewController.data = yourData 
    } 
} 
Смежные вопросы