0

ビューなどを含む TabBarController をプログラムで作成しました。ボタンを押すと、この TabBarController を表示したいと思います。それ、どうやったら出来るの?現在、モーダルで表示していますが、機能しません - sigtrap エラーがスローされます。

これは TabBarController の私のコードです

@implementation TabBarViewController

- (void) loadView
{
    HomeViewController * homeViewController = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil];

    UITabBarController *tabBarController = [[UITabBarController alloc] init];
tabBarController.view.frame = CGRectMake(0, 0, 320, 460);

   // Set each tab to show an appropriate view controller
   [tabBarController setViewControllers:[NSArray arrayWithObjects:homeViewController, homeViewController, nil]];
   [self.view addSubview:tabBarController.view];
   [homeViewController release];
   [tabBarController release];
}

これは、私の mainViewController からの Button Press イベントからこの tabBarController にアクセスするための私のコードです -

 - (IBAction)quickBrowse:(UIButton *)sender
{
    TabBarViewController * tabBarController = [[TabBarViewController alloc]init];
    [self presentModalViewController:tabBarController animated:YES];
    [tabBarController release];
}
4

1 に答える 1

1

IBを使用しておらず、ビューを手動で作成する場合にのみ、メソッドloadViewをオーバーライドする必要があります。その場合、ルートビューをUIViewControllerのviewプロパティに割り当てる必要があります。

このメソッドをオーバーライドする必要はないと思います。viewDidLoadメソッドを使用してUITabBarControllerを作成し、変数に格納できるため、イベントが呼び出されたときに必要なのは、変数をメソッドに渡すことだけです。 presentModalViewController:animated:

最終的なコードは次のようになります。

- (void) viewDidLoad
{
    [super viewDidLoad];

    HomeViewController * homeViewController = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil];

    // you can't pass the same view controller to more than one position in UITabBarController
    HomeViewController * homeViewController2 = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil];

    // local variable
    self.modalTabBarController = [[UITabBarController alloc] init];

   // Set each tab to show an appropriate view controller
   [self.modalTabBarController setViewControllers:[NSArray arrayWithObjects:homeViewController, homeViewController2, nil]];
}

- (void)viewDidUnload
{
    self.modalTabBarController = nil;
    [super viewDidUnload];
}

 - (IBAction)quickBrowse:(UIButton *)sender
{
    [self presentModalViewController:self.modalTabBarController animated:YES];
}
于 2012-07-22T22:44:29.513 に答える