Как я могу вручную переключаться между UIViewControllers в раскадровке?
Все, что мне нужно - это просмотреть контроллер UIView
в том же файле раскадровки вручную с кодом. Я использую раскадровку для создания всех форм и соединений. Мое приложение запускается в контроллере навигации, который предоставляет мне доступ к UIView
(LoginViewController
), а затем он переходит к контроллеру панели вкладок, который обеспечивает 4 UIViews
. Согласно каждому UIView
, у меня есть файлы .h
и .m
. Я знаю о методе segue, это просто, но мне нужен ручной метод. Может быть, я делаю что-то неправильно.
Я пытался использовать этот метод для нажатия контроллера представления в IBAction
:
[self.view pushViewController:LoginViewController animated:YES];
Но это делает ошибку:
Неожиданное имя интерфейса 'LoginViewController: ожидаемое выражение
Потребовалось много времени, чтобы выяснить, что не так, но мне это не удалось.
Вот мой RollEnemyController.m
файл:
// RollEnemyController.m
#import "RollEnemyController.h"
#import "LoginViewController.h"
@implementation RollEnemyController;
@synthesize AttackButtonPressed;
- (IBAction)AttackButtonPressed:(id)sender {
LoginViewController* controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
[self.view pushViewController:controller];
}
@end
И это файл заголовка:
// RollEnemyController.h
#import <UIKit/UIKit.h>
@interface RollEnemyController : UIViewController
- (IBAction)RollButtonPressed:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *AttackButtonPressed;
@end
Ответы
Ответ 1
Я предполагаю, что вы используете UINavigationController
. Тогда вы можете просто сделать следующее:
LoginViewController *controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
Update:
Если вы используете UIStoryboard
, вы можете установить идентификатор вашего нового диспетчера представлений и затем нажать его на свой навигационный контроллер. Чтобы установить идентификатор, выберите свое представление, откройте Инспектор атрибутов и установите идентификатор ( "LoginIdentifier" в моем примере). Затем вы можете сделать это:
LoginViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginIdentifier"];
[self.navigationController pushViewController:controller animated:YES];
Как побочный элемент, я вижу, что вы используете символы капитала для своих методов. Вероятно, вам следует попытаться избежать этого и вместо этого использовать опускаемые символы в именах методов. И поскольку вы говорите, что изучаете Objective-C, вы должны проверить этот удивительный поток здесь на SO: ссылка.
Обновление 2:
Здесь - это zip файл с проектом, показывающим, как это сделать.: -)
Ответ 2
Привет, попробуйте использовать этот код
Раскадровка put ID = "xxx * Name Desire"
отметить использование StoryboarID
UIStoryboard * storyboard = self.storyboard;
DetailViewController * detail = [storyboard instantiateViewControllerWithIdentifier: @ "xxx * Name Desire"];
[self.navigationController pushViewController: detail animated: YES];
Ответ 3
В этом утверждении:
[self.view pushViewController:LoginViewController animated:YES];
Кажется, вы пытаетесь нажать класс. Вы должны нажать объект, ваш фактический контроллер:
LoginViewController* controller = [[LoginViewController alloc] init...];
[self.view pushViewController:controller animated:YES];
это будет, по крайней мере, скомпилировано, и если все остальное в порядке, также дайте второй контроллер.
ИЗМЕНИТЬ:
Я пропустил одну точку. Вы нажимаете на контроллер вида на представление. Это не имеет смысла, вы должны нажать контроллер на контроллер навигации:
<AppDelegate> *del = (AppDelegate*)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:controller animated:YES];
Это верно, по крайней мере, если вы создали свой проект из шаблона на основе навигации (который создает делегат приложения со ссылкой на контроллер навигации). В противном случае, пожалуйста, предоставьте подробную информацию о том, как вы создаете навигационный контроллер.
Ответ 4
Вы упомянули в комментарии, что используете UIStoryboard
. Знаете ли вы о UIStoryboardSegue
? Все, что вам нужно сделать, - перетащить с кнопки на следующий контроллер представления, чтобы установить segue. Затем вы можете выбрать тип перехода. Имейте в виду, что ваши диспетчеры представлений должны быть частью UINavigationController
в раскадровке, чтобы выполнить анимацию "Push".