Переход от контроллера к предыдущему - PullRequest
8 голосов
/ 20 февраля 2012

Я пытаюсь переключиться обратно с моего UIViewController на мой UITableViewController, но, к сожалению, он работает не так, как я хочу.Я с самого начала создал свой интерфейс с раскадровками, так что я не собираюсь переходить из одного представления в другое по коду.До сих пор я просто выдвигал свои Views в sergues, которые легко реализовать с помощью раскадровок.Но когда я попытался вернуться к своим предыдущим представлениям, будет реализован новый ViewController, поэтому все мои данные, которые я сохранил в старых, «потеряны».

На самом деле нет кода, который я мог бы вам представить (потому чтоиз сергов), но ситуация такова:

-> Я получил MutableArray, хранящий вещи в моем UITableView.

-> Пользователь нажимает кнопку сканирования, сканирует новый элемент, который должен быть импортирован вмой массив.

-> При попытке вернуться к своему tableView меня ждет новый контроллер, не подозревающий о данных, которые я сохранил в старом.

Итак, как мне просто вернуться назад?моему старому контроллеру мешает постоянно создавать новый?

Всегда ли sergue-push создает новый контроллер?

(Вопрос может быть простым, но я новичок в этомматериал. Попробовал некоторые результаты, представленные функцией поиска, но ни один из них не сработал :()

/ edit: проблема с всплывающими окнами была решена, но проблема с заполнением массива все еще существует. Код:

GeneralSettings *sharedGS = [GeneralSettings sharedInstance];
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString];
[sharedGS.listArray insertObject:strCheckString atIndex:0];
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN);

Данные в sharedGS.strEAN (т.е. "83274572354") Данные в listArray (null)

Ответы [ 2 ]

20 голосов
/ 20 февраля 2012

Вы не отступаете.Это создает новый экземпляр предыдущего класса контроллера.Вы поп назад.Это можно сделать двумя способами.

1: в коде введите следующий оператор, если вы хотите вернуть (всплывающее) на ваш планшетный контроллер вида.

[self.navigationController popViewControllerAnimated:YES];

2: Если вы хотите сделать это в раскадровке, вам нужно реализовать следующий пользовательский класс segue:

реализация

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
[src.navigationController popViewControllerAnimated:YES];
}

и заголовок

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end

Поместите этометод в вашем UIViewController, чтобы установить свойство обратно к вашему UITableViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"goBackToTableView"])  {
    [[segue destinationViewController] set{whatEverProperyYouWantTo}: {valueOfPropertyToSet}];
    }
}
3 голосов
/ 12 ноября 2014

@ TJ Когда принять этот метод "2: Если вы хотите сделать это в раскадровке, вам нужно реализовать следующий пользовательский класс segue:

внедрение"

и в соответствии с документ следующего документа: «Конфигурирование контроллера назначения при запуске перехода iOS запускает при запуске перехода следующие задачи:

Создание экземпляра контроллера представления назначения. Создание нового объекта перехода, которыйсодержит всю информацию для инициируемого segue.Примечание: segue popover также предоставляет свойство, которое идентифицирует контроллер popover, используемый для управления контроллером представления назначения. Он вызывает метод prepareForSegue: sender: метода источника, передавая в новый объект segueи объект, который вызвал переход. Он вызывает метод выполнения сегмента, чтобы вывести контроллер назначения на экран. Фактическое поведение зависит от типа выполняемого перехода. Например, модальный переход сообщает исходному виду управленияЧтобы представить контроллер представления назначения.Он освобождает объект segue, и переход завершается. "

Он еще раз создает представление viewController, а затем dealloc после вызова переопределенного метода" execute ". Поэтому лучше выбрать первый метод, который вы отправили илиметод делегата согласно документу .

спасибо

...