Jestem nowym programistą iOS i utknąłem z jednym problemem.Połączyć razem: AppDelegate, ViewController i XIB
Co zostało zrobione:
Stworzyłem aplikację na iOS. Początkowo miał main.m, AppDelegate.h, AppDelegate.m i kilka innych plików pomocniczych (nie z kodem), które są zwykle tworzone.
Następnie ręcznie utworzyłem plik XIB z interfejsem (LoginView.xib) i ręcznie dodałem LoginViewController.h oraz LoginViewController.m, aby kontrolować XIB.
Dodano gniazda do LoginViewController.h.
W końcu ustawiłem klasę właściciela pliku (LoginViewController) i utworzyłem połączenia między XIB i LoginViewController.h.
Opis problemu:
muszę pokazać instancję logowania kontrolera widoku i widoku pokaz logowania natychmiast przy starcie aplikacji.
Próbowałem kilku prób i przeczytałem kilkanaście wątków na forum, ale nie ma mowy. Nic nie jest wyświetlane z wyjątkiem tła białego okna. Jak mogę to zrobić poprawnie?
kodreferencyjny:
LoginViewController.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
LoginViewController.m
#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;
}
AKTUALIZACJA !!! Chłopaki, dzięki Wam wszystkim znalazłem inny numer. Gdy mam swój zatwierdzić że mój kod (po odpowiednim wydaniu, oczywiście) jest poprawna, zaczęłam symulator i zobaczyłem, że moje app ulega awarii z następującym wyjątkiem:
NSInternalInconsistencyException with the reason [UIViewController _loadViewFromNibNamed:bundle:] loaded the ... nib but the view outlet was not set.
Dzięki StackOverflow naprawiłem go. Loaded nib but the view outlet was not set - new to InterfaceBuilder
Notowanie Josh Sprawiedliwości komentarzu od tematu I, pod warunkiem link:
- Otwórz plik XIB powodując problemy
- Kliknij ikonę właściciela pliku, na lewym pasku (Top One, wygląda jak żółte obrysowane pole)
- Jeśli nie widzisz paska po prawej stronie, kliknij trzecią ikonę nad "widokiem" na pasku narzędzi. To pokaże pasek z prawej strony.
- Na pasku bocznym po prawej stronie kliknij trzecią kartę - tę, która wygląda trochę jak gazeta.
- W "Klasie niestandardowej" u góry upewnij się, że klasa jest nazwa ViewController, która powinna odpowiadać temu widokowi.Jeśli nie, wpisz go
- Na pasku bocznym po prawej stronie kliknij ostatnią kartę - tę, która wygląda jak kółko ze strzałką w nim.
- Powinieneś zobaczyć "wyloty" z "podglądem" pod nim. Przeciągnij kółko obok niego na ikony „widok” na lewym pasku (na dole jeden, wygląda jak biały kwadrat z grubym szarym konturem
- zapisać xib i ponownie uruchomić
Prawdopodobnie Te informacje zebrane w jednym miejscu pomoże innych przybyszów przejść drogę zdałem szybciej.
Chłopaki, po tym, jak mój widok logowania jest doskonale widoczny przy starcie, spotkałem się z innym problemem: pola tekstowe nie są edytowalne :(klikam pole tekstowe, mam kursor w środku, ale nie mogę ani pisać znaków (nawet klawiatura się nie ujawnia) ani zmieniać ostrości na inne textfield Czy masz jakieś sugestie? Dziękujemy! – DaddyM
I jeszcze jedno pytanie: czy naprawdę potrzebuję tego IBOutlet: IBOutlet UIView * _loginView; ????? – DaddyM