0

navigationController を実装したときに、非常に奇妙な動作に遭遇しました。UITableView を持つ LogInViewController があり、セルは次のように入力されます。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 2;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row == 0) {
        return cellUsername;
    }
    if (indexPath.row == 1){
        return cellPassword;
    }
    else{
        return nil;
    }
}

cellUsername と cellPassword は、.xib で作成したセルです。この LogInViewController を appDelegate の rootViewController として追加すると、正常に動作します。NavigationController を実装したかったので、navController @property を使用して RootViewController を作成し、appDelagate でこのように呼び出しました

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];


RootViewController *rootView = [[RootViewController alloc]init];
rootView.navController = [[UINavigationController alloc] initWithRootViewController:rootView];

self.window.rootViewController = rootView.navController;
[self.window makeKeyAndVisible];
return YES;

そして、viewDidLoad の RootViewController には、次のコードがあります。

[super viewDidLoad];
self.navController = [[UINavigationController alloc]init];
LogInViewController *loginView = [[LogInViewController alloc]init];
[[self navigationController] pushViewController:loginView animated:YES];

LogInViewController を開きますが、最初のセルである cellUsername のみが UiTableView に追加されます。何が問題なのですか? 私はまだ初心者なので、おそらく愚かな何かを見逃しているかもしれません..しかし、それはナビゲーションコントローラーなしで動作するので、かなり混乱しています..ありがとう!

4

2 に答える 2

0

AppDelegate ファイル内

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];


RootViewController *rootView = [[RootViewController alloc]init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootView];

self.window.rootViewController =  navController;
[self.window makeKeyAndVisible];
return YES;

さらに、RootViewController クラスの viewDidLoad で別の navigationController を作成する必要はありません。

于 2012-11-07T13:31:47.537 に答える
0

これがあなたの問題と関係があるかどうかはわかりませんが、viewDidLoad で次の行を使用しないでください。

self.navController = [[UINavigationController alloc]init];

RootViewController は既にナビゲーション コントローラーに埋め込まれているため、self.navigationController を使用して参照を取得できます。

このコードについてもよくわかりません。問題ないかもしれませんが、通常の方法ではありません。

RootViewController *rootView = [[RootViewController alloc]init];
rootView.navController = [[UINavigationController alloc] initWithRootViewController:rootView];
self.window.rootViewController = rootView.navController;

通常の方法は次のようになります。

RootViewController *rootView = [[RootViewController alloc]init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootView];
self.window.rootViewController = nav;
于 2012-11-07T16:30:23.423 に答える