Я новичок в программировании iOS и столкнулся с одной проблемой.
Что было сделано:
Я создал iOS-приложение. Изначально у него были main.m, AppDelegate.h, AppDelegate.m и некоторые другие вспомогательные файлы (не с кодом), которые обычно создаются.
Затем я вручную создал файл XIB с интерфейсом (LoginView.xib) и вручную добавил LoginViewController.h и LoginViewController.m для управления XIB.
Добавлены выходы в LoginViewController.h.
В конце концов, я настроил класс владельца файла (LoginViewController) и установил соединения между XIB и LoginViewController.h.
Описание проблемы:
Мне нужно показать экземпляр контроллера представления входа в систему и показать представление входа сразу при запуске приложения.
Пробовал несколько раз и перечитал с десяток тем форума, но никак. Ничего не отображается, кроме белого фона окна. Как я могу сделать это правильно?
Код ссылки:
Логинвиевконтроллер.h
#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController
{
IBOutlet UIView *_loginView;
IBOutlet UITextField *_tfLogin;
IBOutlet UITextField *_tfPassword;
IBOutlet UIButton *_btnLoginToSystem;
}
- (IBAction)attemptLogin:(id)sender;
@end
Логинвиевконтроллер.м
#import "LoginViewController.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)attemptLogin:(id)sender
{
}
@end
AppDelegate.h
#import <UIKit/UIKit.h>
#import "LoginViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) LoginViewController *loginViewController;
@end
AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
self.loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
[self.window.rootViewController presentModalViewController:self.loginViewController animated:NO];
[self.window makeKeyAndVisible];
return YES;
}
ОБНОВИТЬ!!! Ребят, спасибо вам всем, я нашел еще одну проблему. Как только я получил ваше одобрение того, что мой код (конечно, после соответствующей редакции) верен, я запустил симулятор и увидел, что мое приложение вылетает со следующим исключением:
NSInternalInconsistencyException with the reason [UIViewController _loadViewFromNibNamed:bundle:] loaded the ... nib but the view outlet was not set.
Благодаря StackOverflow я это исправил. Загружен перо, но выход представления не был set - новое в InterfaceBuilder
Цитата комментария Джоша Джастиса из темы, на которую я дал ссылку:
- Откройте файл XIB, вызывающий проблемы
- Нажмите на значок владельца файла на левой панели (верхний, выглядит как желтый прямоугольник)
- Если вы не видите правую боковую панель, щелкните третий значок над «видом» на панели инструментов. Это покажет правую боковую панель
- На правой боковой панели нажмите на третью вкладку, которая немного похожа на газету.
- В разделе «Пользовательский класс» вверху убедитесь, что класс — это имя ViewController, которое должно соответствовать этому представлению. Если нет, введите его
- На правой боковой панели нажмите на последнюю вкладку — ту, которая выглядит как круг со стрелкой внутри.
- Вы должны увидеть «розетки» с «видом» под ним. Перетащите круг рядом с ним на значок «просмотр» на левой панели (нижний выглядит как белый квадрат с толстым серым контуром).
- Сохраните xib и перезапустите
Возможно, эта информация, собранная в один пункт, поможет другим новичкам быстрее пройти путь, пройденный мной.