1

私は1つのヘッダーファイルを持っています

@interface DemoFirstViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@end

このヘッダーファイルのソースファイルで、このメソッドを宣言しました

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    AnotherViewController *anotherViewController=[[AnotherViewController alloc]   initWithNibName:@"AnotherViewController" bundle:nil];
    [self.navigationController pushViewController:anotherViewController animated:YES];

    NSLog(@"didSelectRowAtIndexPath: row=%d", indexPath.row);

}

そしてanotherViewControllerファイルは

@interface AnotherViewController : UIViewController
{
    IBOutlet UILabel *message;
}

@property (nonatomic , retain) UILabel *message;

@end

私はこれをすべてXibファイルを使用して行っています。ストーリーボードではありません。

これはtabbased Applicationです。および2つのビューコントローラはすでにAppdelegateで宣言されています

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UIViewController *viewController1 = [[DemoFirstViewController alloc] initWithNibName:@"DemoFirstViewController" bundle:nil];
    UIViewController *viewController2 = [[DemoSecondViewController alloc] initWithNibName:@"DemoSecondViewController" bundle:nil];
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = @[viewController1, viewController2];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;

}

テーブルセルをタップすると、anotherViewcontrollerが起動しません。Plzはできるだけ早く返信します。

4

3 に答える 3

1

これにはいくつかの理由が考えられます。

  1. UINavigationControllerAppdelegateクラスで正しく実装する必要があります。
  2. UITableViewのいずれにも追加しないsubViewself.viewください。
  3. didSelectRowAtIndexPath:が呼び出されている場合は、それ以外の場合は問題ありませんtableView。デリゲートを設定するのを忘れています。

    tableView.delegate = self;
    

編集:彼が使用していると彼が言ったZeelのコメントを読みTabBarましたが、以前は言及していなかったので、回答を編集しています:-

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    DemoFirstViewController *viewController1 = [[DemoFirstViewController alloc] initWithNibName:@"DemoFirstViewController" bundle:nil];
    UINavigationController *nav1 =[[UINavigationController alloc] initWithRootViewController:viewController1];
    DemoSecondViewController *viewController2 = [[DemoSecondViewController alloc] initWithNibName:@"DemoSecondViewController" bundle:nil];
    UINavigationController *nav2 =[[UINavigationController alloc] initWithRootViewController:viewController2];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = @[nav1, nav2];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}
于 2013-01-05T10:13:10.380 に答える
0

上記のすべての答えは正しい方向を指しています。それでもまだ把握していない場合に備えて、に次のコードを追加したかどうかを確認してくださいappdelegate

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];  
self.window.rootViewController = navigationController;

もう一度確認してください。

于 2013-01-05T10:30:45.437 に答える
0
NSLog(@"Navigation Controller: %@", self.navigationController);

この行で何が印刷されているかを確認してください。階層に navigationController を追加するのを忘れたのではないかと思います

更新: AppDelegate コードに基づいて、次のように更新して問題を解決します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UIViewController *viewController1 = [[DemoFirstViewController alloc] initWithNibName:@"DemoFirstViewController" bundle:nil];

    // here I create a Navigation Controller and set its root view controller to viewController1
    UINavigationController *navController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];

    UIViewController *viewController2 = [[DemoSecondViewController alloc] initWithNibName:@"DemoSecondViewController" bundle:nil];
    self.tabBarController = [[UITabBarController alloc] init];

    // updated this line to show the navController1 (which contains viewController1)
    self.tabBarController.viewControllers = @[navController1, viewController2];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;

}

viewController2 でさえ、何かをプッシュする必要がある UITableViewController である場合は、同じことを行います (別の UINavigationController を追加し、ルート ビューコントローラーを設定し、TabBarController のビューコントローラーを設定します)。

于 2013-01-05T10:12:38.693 に答える