0

別のクラスからViewControllerを開くことができるようにしたい。だから私はそれを呼び出すだけで、必要な場所にビューを開くことができます。

したがって、コードを保持するクラスに次の設定があります。


+ (void)openCalcView: (NSString *)nameOfView {

UIViewController *controller;

if ([nameOfView isEqualToString:@"Tax"]) {

    controller = [[TAXViewController alloc]initWithNibName:@"TAXViewController" bundle:nil];


}else if ([nameOfView isEqualToString:@"Rent"]){

    controller = [[RENTViewController alloc]initWithNibName:@"RENTViewController" bundle:nil];

}

controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:controller animated:YES completion:nil];
[controller release];

}

しかし[self presentViewController:controller animated:YES completion:nil];、私に警告を与えます:

Class method '+presentViewController:animated:completion:' not found (return type defaults to 'id')

このような簡単なことはNSLog、どのクラスからでも呼び出すことができます。しかし、これは機能しません。

4

1 に答える 1

4

openCalcViewはClassメソッドであるため、UIViewControllerインスタンスはありません(つまり、[self presentViewController:]メソッドはありません)。

次のように、UIViewControllerをこのクラスメソッドにも渡す必要があります。

+ (void)openCalcView: (NSString *)nameOfView fromViewController:(UIViewController *)controller { 

    UIViewController *newController; 

    if ([nameOfView isEqualToString:@"Tax"]) { 

        newController= [[TAXViewController alloc]initWithNibName:@"TAXViewController" bundle:nil]; 


    }else if ([nameOfView isEqualToString:@"Rent"]){ 

        newController= [[RENTViewController alloc]initWithNibName:@"RENTViewController" bundle:nil]; 

    } 

    newController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [controller presentViewController:newController animated:YES completion:nil]; 
    [newController release]; 

} 

コントローラパラメータは、新しいビューコントローラを開いているUIViewControllerを表します

于 2012-08-17T19:45:42.207 に答える