2013-03-27 1 views
0

Я знаю, что я недавно задал вопрос, немного похожий на этот, но я представляю проект через несколько часов, и это моя единственная ошибка.Перемещение данных между VC не работает

В первом VC:

- (void)textViewDidEndEditing:(UITextView *)textView { 
SecondViewController *theVCMover = [[SecondViewController alloc] init]; //I imported the .h file 

    theVCMover.rawUserInput = textView.text; 
    //If I put an NSLog of theVCMover.rawUserInput here, it works and displays the string 

    theVCMover.hexOrBinIndex = hexOrBin.selectedSegmentIndex; //same problem here 

Во втором VC:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog (@"Bt-dubs, the moved text is %@", rawUserInput); //is (null) here 
    CleanerText.text = rawUserInput; //CleanerText is a TextView 
} 

Я не могу переместить текст пользовательского ввода в первом VC ко второму VC. Я попробовал отладку и инициализировал инициализациюVCMover.rawUserInput IS, и он получает textView.text и успешно сохраняет его в первом VC, но затем он теряется при переходе ко второму VC и появляется там как (null). Я пробовал так много разных способов за ночь, каждый со своим тупиком ... но это довольно просто, поэтому я хотел бы использовать его в своих будущих проектах.

P.S. Сначала я слишком беспокоился о перемещенной строке, отображаемой сразу после нажатия второй вкладки (второй VC), но теперь все, о чем я забочусь, это просто переместить эту кровавую строку успешно. Вечная благодарность !!

+0

Можете ли вы показать свой код, который выполняет переход ко второму контроллеру представления? – rickerbh

+0

Это все с начала экземпляра SecondViewController ... есть ли еще код, который я должен написать для выполнения перехода? –

+0

В настоящий момент в первом блоке кода вы создаете экземпляр «SecondViewController» и назначаете его локальной переменной ('theVCMover'). Где вы выполняете segue или нажимаете его на контроллер навигации или что-то еще, что вам нужно сделать, чтобы отобразить 'theVCMover'? – rickerbh

ответ

1

Если вы хотите направить текст на контроллер вида, который уже существует на панели вкладок, вы не должны инициализировать новый в этом методе textViewDidEndEditing , Вы должны изменить текст в VC, который уже имеет панель вкладок.

// Not nice code because it uses magic numbers and fixed locations of view 
// controllers in the tab bar 
- (void)textViewDidEndEditing:(UITextView *)textView { 
    // Assumes the SecondViewController is the second tab on the tab bar controller 
    SecondViewController *theVCMover = [self.tabBarController.viewControllers objectAtIndex:1]; 

    theVCMover.rawUserInput = textView.text; 
    theVCMover.hexOrBinIndex = hexOrBin.selectedSegmentIndex; 
    ..... 
} 

Надеюсь, что это поможет.

+0

IT WORKED! Мой день был сделан, серьезно, большое спасибо! Хорошо, всего лишь несколько тривиальных вопросов на этом пути: Как узнать имя моего контроллера панели вкладок? Он все равно предложил, но я проверил его вкладки инспектора в раскадровке и не нашел его. Где я пишу код, который загружается при каждом нажатии вкладки, а не только при первом загрузке? Еще раз спасибо! –

+0

Я обновил образец кода, поскольку 'UIViewController' автоматически поддерживает ссылку на родительский' UITabBarController'. Для загрузки чего-либо каждый раз при нажатии вкладки вы можете либо сделать это в методах 'viewWillAppear:' или 'viewDidAppear:' контроллера входящего представления, либо установить делегат для вашего 'UITabBarController' и реализовать' tabBarController: shouldSelectViewController: ' метод. Кроме того, если ответ отвечает на ваш вопрос, не стесняйтесь его принимать :-) – rickerbh

+0

Большое вам спасибо, хотя ... кажется, это так просто; Я не знаю, почему люди используют одиночные игры и усложняют все это ... –

0

Это проблема с прицелом? Вы не указали код после назначения theVCMover.hexOrBinIndex. Предположительно, именно там вы показываете второй VC (например, вы его нажимаете или что-то в этом роде). В противном случае, когда textvewDidEndEditing завершает работу, VCMover выйдет за пределы области действия, и внесенные вами изменения будут потеряны при фактическом загрузке представления. Вы можете NSLog theVCMover, а затем «self» в viewDidLoad, это должен быть тот же объект. Если они не являются просмотром, который вы загрузили, это не тот, который вы загрузили.

+0

Да, я просто понял, что ... как я нажимаю тот, который я ввел в открытое представление? –

+0

вы можете просто представить модальный VC - который поместил бы новый VC перед предыдущим, и когда вы упустили новый, вы вернетесь к другому (проверьте presentModalViewController и rejectModalViewController). Или, если у вас есть UINavigationController, в котором размещен ваш первый VC, тогда вы будете использовать pushViewController в навигационном VC Надейтесь, что это не слишком красно, чтобы иметь смысл –