Изменение viewController при нажатии кнопки

Я новичок в программировании для iPhone. что я пытаюсь, так это то, что у меня есть один экран с кнопкой. И я хочу изменить контроллер представления, а не только представление, когда я нажимаю эту кнопку (я знаю, как добавить подпредставление), потому что из этого второго контроллера представления мне нужно перейти к третьему представлению, что невозможно, если я добавлю подпредставление в первый место. Может ли кто-нибудь помочь мне с этим? Это возможно? и если да, то как? Все представления и контроллер представления создаются программно. Я не использую ИБ.

РЕДАКТИРОВАТЬ: вот соответствующий код, который срабатывает при нажатии кнопки

-(id)showCurrentLoc:(id)sender { 
 locationController = [currentLocController alloc]; 
 [entry removeFromSuperview]; 
 [newLoc removeFromSuperview]; 
 [currentLoc removeFromSuperview]; 
 [self.view setBackgroundColor:[UIColor clearColor]]; //[self.view addSubview: [locationController view]]; 
 [self.navigationController pushViewController:locationController animated:YES];  [locationController release]; 
 return 0; 
} //Location Controller is the tableViewController

Спасибо Вик


person Vik    schedule 28.04.2011    source источник
comment
Для этого можно использовать навигационный контроллер.   -  person saadnib    schedule 28.04.2011


Ответы (4)


Обычно для таких вещей используется навигационный контроллер, чтобы пользователь мог легко вернуться к предыдущему представлению. Затем ваш контроллер представления сделает что-то вроде этого:

[self.navigationController pushViewController:someNewViewController animated:YES];

Если вы хотите самостоятельно управлять контроллерами представления, вы всегда можете просто изменить свойство окна rootViewController. Пожалуйста, прочтите Руководство по программированию View Controller, чтобы получить полную картину. .

person Caleb    schedule 28.04.2011
comment
@Caleb- это то, что я пытаюсь, но дело в том, что я пытаюсь использовать tableViewController в качестве своего второго viewController, но это не работает для этого. Если я просто добавлю [self.view addSubView:[xyztableview view]]. тогда я могу увидеть свой вид таблицы. Я не знаю, что не так в первом подходе? - person Vik; 28.04.2011
comment
@Vik Извините - я не могу понять ваш комментарий. Поскольку вы ОП, я предлагаю вам отредактировать свой вопрос, чтобы более четко объяснить реальную проблему. Однако, прежде чем сделать это, внимательно ознакомьтесь с документом, на который я ссылался. Это обязательное чтение для разработчиков iOS, и оно определенно объясняет, как переходить с одного контроллера на другой. - person Caleb; 28.04.2011
comment
-(id)showCurrentLoc:(id)sender { locationController = [currentLocController alloc]; [запись removeFromSuperview]; [newLoc removeFromSuperview]; [currentLoc removeFromSuperview]; [self.view setBackgroundColor: [UIColor clearColor]]; //[self.view addSubview:[locationController view]]; [self.navigationController pushViewController: анимированный locationController: YES]; [релиз LocationController]; вернуть 0; } // Контроллер местоположения — это tableViewController - person Vik; 28.04.2011
comment
Во-первых, вы выделяете, но не инициализируете locationController. Далее, если вы используете навигационный контроллер, вам не нужны все эти addSubview/removeFromSuperview; просто поместите новый контроллер представления в стек навигации. - person Caleb; 28.04.2011
comment
@Caleb Пожалуйста, не могли бы вы сказать мне, является ли контроллер просмотра, который я хочу нажать, uitabbarcontroller? Меня тоже смущает переход с одного ВК на другой. 99% людей сказали, что используют uinavigationcontroller, он автоматически обрабатывает переключение между VC. Я хочу настроить управление переключением между VC. - person S.J; 10.07.2013
comment
@ SJ Я не знаю, что вы пытаетесь сделать, но термин push w.r.t. Контроллеры представления происходят из стековой организации UINavigationController. Кроме того, вы никогда не помещаете контроллер вкладок в стек навигации — контроллеры вкладок могут содержать контроллеры навигации, но не наоборот. Сначала прочитайте Руководство по программированию View Controller, а затем задайте вопрос, если вы все еще застряли. - person Caleb; 10.07.2013
comment
@Caleb Я хочу переключиться с одного контроллера представления на другой, многие говорят, что использование uinavigationcontroller - лучший вариант. Хорошо, у меня есть инициализация uinavigationcontroller с rootview, который является подклассом uiviewcontroller с именем view1, теперь я хочу добавить еще один viewcontroller, но это uitabbarcontroller, что теперь? как управлять этой ситуацией? да, я очень хорошо знаю, что uitabbarcontrller нельзя нажимать на uinavcon. Или есть ли какой-либо ручной способ управления этим переключением контроллера просмотра? - person S.J; 11.07.2013
comment
@ S.J Вы действительно должны начать свой собственный вопрос, а не использовать комментарии здесь. Однако сначала выполните поиск, потому что это звучит как дубликат ряда существующих вопросов, таких как этот. - person Caleb; 11.07.2013
comment
@Caleb Пожалуйста, посмотрите, что я пытаюсь спросить, я не спрашиваю, как нажать tabbarcon в uinavcon. - person S.J; 11.07.2013
comment
@ SJ О чем бы вы ни пытались спросить, лучше всего это сделать в отдельном вопросе, а не в комментариях здесь. - person Caleb; 11.07.2013

Вы можете сделать что-то вроде этого

        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];
person Janak Nirmal    schedule 28.04.2011
comment
это то, что я пытаюсь, но дело в том, что я пытаюсь использовать tableViewController в качестве моего второго viewController, но это не работает для этого. Если я просто добавлю [self.view addSubView:[xyztableview view]]. тогда я могу увидеть свой вид таблицы. Я не знаю, что не так в первом подходе? - person Vik; 28.04.2011
comment
@Vik, как вы определяете tableViewController, то есть объявление? Не могли бы вы опубликовать код для создания объекта для вашего tableViewController? - person Janak Nirmal; 28.04.2011
comment
@Jennie- Спасибо, я могу изменить контроллер представления с помощью навигационного контроллера после объявления его в делегате. - person Vik; 28.04.2011

UINavigationController — это то, что вам нужно. Он управляет стеком UIViewController, и если вы хотите добавить новый UIViewController, просто поместите его в этот стек навигации. Он автоматизирует для вас поведение кнопки «Назад», и вы можете извлечь свой текущий UIViewController из стека, когда закончите с ним.

person Krishnabhadra    schedule 28.04.2011
comment
@Krishnabhadra - это то, что я пытаюсь сделать, но дело в том, что я пытаюсь сделать tableViewController своим вторым контроллером просмотра, но это не работает для этого. Если я просто добавлю [self.view addSubView:[xyztableview view]]. тогда я могу увидеть свой вид таблицы. Я не знаю, что не так в первом подходе? - person Vik; 28.04.2011
comment
Это должно работать. Можете ли вы опубликовать соответствующий код, чтобы мы могли перепроверить - person Krishnabhadra; 28.04.2011
comment
вот соответствующий код, который срабатывает при нажатии кнопки -(id)showCurrentLoc:(id)sender { locationController = [currentLocController alloc]; [запись removeFromSuperview]; [newLoc removeFromSuperview]; [currentLoc removeFromSuperview]; [self.view setBackgroundColor: [UIColor clearColor]]; //[self.view addSubview:[locationController view]]; [self.navigationController pushViewController: анимированный locationController: YES]; [релиз LocationController]; вернуть 0; } // Контроллер местоположения — это tableViewController - person Vik; 28.04.2011
comment
@Vik.. не добавляйте код в комментарий.. Вы можете отредактировать исходный вопрос и поместить туда код.. - person Krishnabhadra; 28.04.2011
comment
@Barry Удалена ссылка на учебник. В любом случае, в этом не было необходимости, так как я ответил на исходный вопрос, который позже был отредактирован, поскольку пользователь использовал UINavigationController. - person Krishnabhadra; 17.01.2013
comment
@Krishnabhadra Не нужно оправдываться, мне просто было интересно узнать о статье в блоге. Спасибо за уборку. - person ; 19.01.2013

Вы можете работать с UINavigationController. Добавьте свой первый UIViewController в метод init следующим образом:

        [self setViewControllers:[NSArray arrayWithObject:viewController]];

И затем, когда кнопка нажата или сделан выбор, вы нажимаете второй контроллер с помощью (в первом viewController):

[self.navigationController pushViewController:controller animated:YES]; 

Таким образом, вы также получите автоматический (кнопка возврата). По сути, вы создаете стек UIViewControllers, который вы можете вставлять и извлекать, как в обычном стеке.

Надеюсь, это поможет. Посмотрите следующее: Справочник по классу UINavigationController

person ophychius    schedule 28.04.2011