заменить текущий вид любым существующим новым - PullRequest
1 голос
/ 29 сентября 2010

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

-(void)replaceView:(UIView*)oldSubView withView:(UIView*)newSubView;

Я пытаюсь реализовать следующее:

В моем проекте у меня 10 представлений, все они имеют свои файлы .m и .h. Позволяет представлять каждый вид с номером от 1 до 10.

Каждое представление просто содержит 9 кнопок, которые позволяют пользователю нажимать кнопку, а затем приложение переводит пользователя в указанное представление в зависимости от нажатой кнопки.

Пример:

Допустим, текущий отображаемый вид: view1. на view1 отображаются 9 кнопок, каждая из которых соответствует отдельному представлению в приложении.

[2] [3] [4] [5] [6] [7] [8] [9] [10]

ПРИМЕЧАНИЕ: кнопка 1 отсутствует, поскольку она отвечает на представление 1, которое является текущим представлением, поэтому кнопка 1 не требуется в этом представлении.

Действие: Пользователь нажимает кнопку 6. метод будет вызван из отдельного класса с именем viewSwitchManager, заменит view1 текущее представление, view6 - новое представление.

новое представление, которое будет представлением6, будет затем отображаться снова, кнопки, которые соответствуют другому представлению в приложении, примерно так:

[1] [2] [3] [4] [5] [7] [8] [9] [10]

ПРИМЕЧАНИЕ: кнопка 6 отсутствует, поскольку она отвечает на представление 6, которое является текущим представлением, поэтому кнопка 6 не требуется в этом представлении.

Это то, чего я пытаюсь достичь. Я пробовал разные вещи, но я продолжаю получать ошибки. В какой-то момент даже ошибка SIGBART. У меня были проблемы с отправкой представлений в качестве параметров, проблемы с получением текущего представления и заменой его новым представлением и так далее. Я думал о том, чтобы иметь навигационный контроллер, но, глядя на это, похоже на пугающий опыт, и я действительно не хочу углубляться в разные слои. Было бы просто иметь простую систему «один в один». лол

Может кто-нибудь, пожалуйста, помогите мне, так как это заняло много времени! Поскольку эта проблема занимала большую часть моего времени, мне даже пришлось выкупить лицензию, чтобы выиграть больше времени, что довольно забавно.

Любая помощь будет очень признательна. Заранее спасибо.

1 Ответ

1 голос
/ 29 сентября 2010

Звучит так, как будто viewSwitchManager должно происходить от UIViewController, который я назову SwitchViewController в моем примере кода ниже.В качестве фона view используется мягкий UIView, служащий фоном, который всегда будет покрыт панелью, заполненной кнопками.

После этого все должно быть просто:

@implementation SwitchViewController
-(void) replaceView:(UIView*)oldSubView withView:(UIView*)newSubView {
    [[self view] addSubview:newSubView];
    [oldView removeFromSuperview];
}
@end

Я подозреваю, что ваши проблемы связаны не столько с управлением представлениями, сколько с управлением памятью.Если вы не сохраните его в другом месте, [oldView removeFromSuperview] освободит и освободит старое представление.

Две вещи, которые вы можете сделать, чтобы ваш код был более надежным.Во-первых, соберите с помощью анализатора (Cmd-Shift-a) и устраните все найденные проблемы.

Два, включите Зомби.NSZombieEnabled приводит к тому, что все освобожденные объекты сохраняются в памяти, но помечаются как "освобожденные".Если когда-либо использовался освобожденный объект «зомби», возникает исключение.После этого необходимо определить, почему ваши объекты не сохраняются надлежащим образом.Вот как установить NSZombieEnabled:

  • Проект -> Редактировать активный исполняемый файл
  • Выберите вкладку «Аргументы»
  • Добавить в «Переменные для установки всреда "
    • Имя: NSZombieEnabled
    • Значение: ДА
...