#ios #cocoa-touch #uibutton #viewcontroller
#iOS #cocoa-touch #uibutton #viewcontroller
Вопрос:
Я новичок в программировании для iPhone. что я пытаюсь, так это то, что у меня есть один экран с кнопкой. И я хочу изменить view controller не только view при нажатии этой кнопки (я знаю, как добавить вложенный просмотр), потому что из этого 2-го view controller мне нужно перейти к третьему view, что невозможно, если я добавлю вложенный просмотр в первую очередь. Кто-нибудь, пожалуйста, может мне с этим помочь? Возможно ли это? и если да, то каким образом? Все представления и контроллер представления создаются программно. Я не использую IB.
РЕДАКТИРОВАТЬ: вот соответствующий код, который срабатывает при нажатии кнопки
-(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
Спасибо
Vik
Комментарии:
1. Для этого вы можете использовать навигационный контроллер.
Ответ №1:
Вы можете сделать что-то вроде этого
YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
[self.navigationController pushViewController:objYourViewController animated:YES];
[YourViewController release];
Комментарии:
1. это то, что я пытаюсь, но дело в том, что я пытаюсь использовать TableViewController в качестве моего второго ViewController, но для этого это не работает. Если я просто добавлю [self.view addSubview:[xyztableview view]]. затем я могу видеть свое табличное представление. Я не знаю, что не так в первом подходе?
2. @Vik как вы определяете TableViewController, т.Е. объявление? Не могли бы вы, пожалуйста, опубликовать код для создания объекта для вашего TableViewController?
3. @Jennie- Спасибо, я могу изменить view controller с помощью navigation controller после объявления его в delegate.
Ответ №2:
Обычно для подобных целей используется навигационный контроллер, чтобы пользователь мог легко вернуться к предыдущему просмотру. Затем ваш view controller будет делать что-то вроде этого:
[self.navigationController pushViewController:someNewViewController animated:YES];
Если вы хотите самостоятельно управлять контроллерами просмотра, вы всегда можете просто изменить rootViewController
свойство window. Пожалуйста, прочтите руководство по программированию View Controller для получения полной картины.
Комментарии:
1. @Caleb- это то, что я пытаюсь, но дело в том, что я пытаюсь использовать TableViewController в качестве моего второго ViewController, но для этого это не работает. Если я просто добавлю [self.view addSubview:[xyztableview view]]. затем я могу видеть свое табличное представление. Я не знаю, что не так в первом подходе?
2. @Vik Извините — я не могу понять смысл вашего комментария. Поскольку вы являетесь оператором, я предлагаю вам отредактировать свой вопрос, чтобы более четко объяснить реальную проблему. Однако, прежде чем вы это сделаете, пожалуйста, внимательно ознакомьтесь с документом, на который я ссылался. Это обязательное чтение для разработчиков iOS, и в нем определенно объясняется, как перейти с одного контроллера на другой.
3. -(id)showCurrentLoc: (id) отправитель { locationController = [currentLocController alloc]; [запись removeFromSuperview]; [newLoc removeFromSuperview]; [currentLoc removeFromSuperview]; [self.view setBackgroundColor: [UIColor clearColor]]; //[self.view addSubview: [locationController view]]; [self.view NavigationController pushViewController: анимированный locationController: ДА]; [Выпуск locationController]; возвращает 0; } //Контроллер местоположения — это TableViewController
4. Для начала, вы выделяете, но не инициализируете locationController. Далее, если вы используете навигационный контроллер, вам не нужны все эти addSubview / removeFromSuperview; просто вставьте новый view controller в стек навигации.
5. @Caleb, пожалуйста, не могли бы вы сказать мне, является ли viewcontroller, который я хочу нажать, uitabbarcontroller? Я также смущен переключением с одного VC на другой. 99% людей сказали, что используют uinavigationcontroller, он автоматически обрабатывает переключение между VCS. Я хочу настроить переключение между VCS.
Ответ №3:
UINavigationController — это то, что вам нужно. Он управляет стеком UIViewController
s, и если вы хотите добавить новый UIViewController, просто вставьте его в этот навигационный стек. Это автоматизирует для вас поведение кнопки возврата, и вы можете извлекать свой текущий UIViewController из стека, когда закончите с ним.
Комментарии:
1. @Krishnabhadra — это то, что я пытаюсь, но дело в том, что я пытаюсь использовать TableViewController в качестве моего второго ViewController, но для этого это не работает. Если я просто добавлю [self.view addSubview:[xyztableview view]]. затем я могу видеть свое табличное представление. Я не знаю, что не так в первом подходе?
2. Это должно сработать .. Можете ли вы опубликовать соответствующий код, чтобы мы могли перепроверить
3. вот соответствующий код, который срабатывает при нажатии кнопки -(id)showCurrentLoc:(id)отправитель { locationController = [currentLocController alloc]; [запись removeFromSuperview]; [newLoc removeFromSuperview]; [currentLoc removeFromSuperview]; [self.view setBackgroundColor: [UIColor clearColor]]; //[self.view добавляет SUBVIEW: [ locationController view]]; [self.NavigationController pushViewController: анимированный locationController: ДА]; [Выпуск locationController]; возвращает 0; } // Контроллер местоположения — это TableViewController
4. @Vik ..не добавляйте код в комментарий.. Вы можете отредактировать свой исходный вопрос и поместить туда код..
5. @Barry удалил ссылку на руководство. В любом случае, это не понадобилось, поскольку я ответил на первоначальный вопрос, который позже был отредактирован, поскольку пользователь использовал UINavigationController.
Ответ №4:
Вы могли бы работать с UINavigationController. Добавление вашего первого UIViewController подобным образом в метод init:
[self setViewControllers:[NSArray arrayWithObject:viewController]];
И затем, когда нажата кнопка или сделан выбор, вы нажимаете на второй контроллер (в первом ViewController):
[self.navigationController pushViewController:controller animated:YES];
Таким образом, вы также получите автоматический (кнопка «Назад»). В основном вы создаете стек UIViewControllers, который вы можете нажимать и извлекать, как с обычным стеком.
Я надеюсь, что это поможет. Посмотрите на следующее: Ссылка на класс UINavigationController
Ответ №5:
- (void) loadViewAtIndex:(NSInteger)index {
[self unloadViewAtIndex:activeViewIndex];
switch (index) {
case 1:
{
if (viewController1 == nil)
{
viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
}
viewController1.view.frame = CGRectMake(0.0, 0.0, viewController1.view.frame.size.width, viewController1.view.frame.size.height);
[window addSubview:viewController1.view];
}
break;
case 2:
{
if (viewController2 == nil)
{
viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
}
viewController2.view.frame = CGRectMake(0.0, 0.0, viewController2.view.frame.size.width, viewController2.view.frame.size.height);
[window addSubview:viewController2.view];
}
break;
default:
break;
}
activeViewIndex = index;
}
- (void) unloadViewAtIndex:(NSInteger)index {
switch (index) {
case 1:
{
if (viewController1 != nil)
{
[viewController1.view removeFromSuperview];
[viewController1 release];
viewController1 = nil;
}
}
break;
case 2:
{
if (viewController2 != nil)
{
[viewController2.view removeFromSuperview];
[viewController2 release];
viewController2 = nil;
}
}
break;
default:
break;
}
}