8

私はiOSプログラミングに不慣れで、1つの問題で立ち往生しています。

何が行われたか:

iOSアプリケーションを作成しました。最初は、main.m、AppDelegate.h、AppDelegate.m、および通常作成されるその他のサポートファイル(コードを含まない)がありました。

次に、インターフェイス(LoginView.xib)を使用してXIBファイルを手動で作成し、LoginViewController.hとLoginViewController.mを手動で追加してXIBを制御しました。

LoginViewController.hにアウトレットを追加しました。

結局、ファイルの所有者クラス(LoginViewController)を設定し、XIBとLoginViewController.hの間に接続を確立しました。

問題の説明:

インスタンス化されたログインビューコントローラーを表示し、アプリケーションの起動時にすぐにログインビューを表示する必要があります。

私は何度か試みて、数十のフォーラムスレッドを読みましたが、方法はありませんでした。白いウィンドウの背景以外は何も表示されません。どうすれば修正できますか?

参照コード:

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;
}

アップデート!!!皆さん、ありがとうございました。別の問題を見つけました。コードが正しいことを承認したら(もちろん、適切なエディションの後)、シミュレーターを起動し、次の例外を除いてアプリがクラッシュすることを確認しました。

NSInternalInconsistencyException with the reason [UIViewController _loadViewFromNibNamed:bundle:] loaded the ... nib but the view outlet was not set.

StackOverflowのおかげで私はそれを修正しました。 ペン先をロードしましたが、ビューアウトレットが設定されていません-InterfaceBuilderの新機能

私がリンクを提供したトピックからのジョシュ・ジャスティスのコメントの引用:

  1. 問題の原因となるXIBファイルを開く
  2. 左側のバーにあるファイルの所有者アイコンをクリックします(上部のアイコンは黄色の枠で囲まれたボックスのように見えます)
  3. 右側のサイドバーが表示されない場合は、ツールバーの「表示」の上にある3番目のアイコンをクリックします。これにより、右側のサイドバーが表示されます
  4. 右側のサイドバーで、3番目のタブをクリックします。これは新聞のように見えます。
  5. 上部の[カスタムクラス]で、[クラス]がこのビューに対応するViewControllerの名前であることを確認します。そうでない場合は、入力してください
  6. 右側のサイドバーで、最後のタブをクリックします。これは、矢印の付いた円のように見えます。
  7. その下に「ビュー」が表示された「アウトレット」が表示されます。その横にある円を左側のバーの「表示」アイコンにドラッグします(下の円は、太い灰色の輪郭を持つ白い正方形のように見えます)
  8. xibを保存して再実行します

おそらく、この情報を1つのポイントに集約することで、他の新規参入者が私が通過した方法をより速く通過できるようになります。

4

3 に答える 3

8

LoginViewControllerをapplication:didFinishLaunchingWithOptions:メソッドのルートビューコントローラーとして設定します。

self.window.rootViewController = self.loginViewController;

この行を削除します。

[self.window.rootViewController presentModalViewController:self.loginViewController animated:NO];
于 2013-03-13T21:39:32.237 に答える
2

AppDelegate.mrootViewControllerでこのように設定する必要があります

self.window.rootViewController = self.loginViewController;
于 2013-03-13T21:38:58.937 に答える
0

ストーリーボードを使用したインターフェイスの作成に取り組んだことはありますか?(ストーリーボードはiOS 5以降の新機能です)基本的に、すべてのView Controllerを1つのファイルにレイアウトし、それらの間の接続を視覚的に設定する方法です。あなたがやりたいことはストーリーボードで本当に簡単です。ストーリーボードファイルにViewControllerを設定すると、最初に設定したストーリーボードを指す矢印が表示されます。つまり、アプリを実行すると、最初に読み込まれるビューになります。別のビューを最初にロードする場合は、その矢印を別のビューコントローラーにドラッグするだけです。

于 2013-03-13T22:00:50.407 に答える