Подтвердить что ты не робот

Как я могу вручную переключаться между 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
4b9b3361

Ответ 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".