1

ViewControllersを切り替えるコードをSwitchControllerという名前の単一のクラスに配置したいと思います。しかし、何も起こりません。

コードは次のとおりです。

//AppDelegate.m

-(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];

        RootViewController *root = [[RootViewController alloc] init];
        [self.window setRootViewController:root];

        [self.window makeKeyAndVisible];
        return YES;
}

//SwitchController.h

@interface SwitchController : NSObject

@property (strong,nonatomic) RootViewController *rootViewController;

+(SwitchController *)sharedInstance;
-(void)requestToSwitchViewController:(NSInteger)tag;

@end

//SwitchController.m

#import "SwitchController.h"
#import "FirstViewController.h"
#import "SecondViewController.h"

@implementation SwitchController

@synthesize rootViewController = _rootViewController;

-(id)init
{
    self = [super init];
    if (self == nil)
    {
        _rootViewController = [[RootViewController alloc] init];
    }
    return self;
}

+(SwitchController *)sharedInstance
{
    static SwitchController *sharedSingleton = nil;
@synchronized([SwitchController class])
{
    if(sharedSingleton == nil)
    {
        sharedSingleton = [[self alloc] init];
    }
}
return sharedSingleton;
}

-(void)requestToSwitchViewController:(NSInteger)tag
{
    switch (tag)
    {
        case 1:
        {
            FirstViewController *first = [[FirstViewController alloc] init];
            [self.rootViewController presentViewController:first animated:YES completion:nil];
        }
            break;
         .........  //Do something else
        default:
            break;
    }
}

@end

//これはself.window.rootViewController------RootViewController.mです

//このViewControllerのビューにはボタンがあり、押すと次のようになります

    - (IBAction)pressed:(id)sender
    {
        [[SwitchController sharedInstance] requestToSwitchViewController:[(UIButton *)sender tag]];
    }

それで、私のコードに何か問題がありますか?

ボタンを押しても何も起こらないのはなぜですか?

4

2 に答える 2

1

いくつかの問題があるかもしれません..

1) ボタン アウトレットがこの方法に正しく接続されているかどうかを確認します。-(IBAction)pressed:(id)sender;

@synthesize2) の後にこの行を追加しますSwitchController.m

static SwitchController *sharedSingleton = nil;

3)このようにメソッドを変更します

+(SwitchController *)sharedInstance
{
    if(sharedSingleton == nil)
    {
        sharedSingleton = [[self allocWithZone:NULL] init];
    }
  return sharedSingleton;
}

-id(init)4)メソッドからこの行を削除します

// You do not need to re-initialize the root view controller
_rootViewController = [[RootViewController alloc] init];

5) ボタンが有効かどうかを確認します。このメソッドを呼び出す前requestToSwitchViewController:に、ログに記録する内容を確認してください

アップデート:

次のように試してください: (このためにcreate a property for navigation controllerは、自分appDelegateで合成する必要があります)

switch (tag)
{
    case 1:
    {
        FirstViewController *first = [[FirstViewController alloc] init];
        appDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate.navigationController presentViewController:first animated:YES completion:nil];
    }
    .....
  .........
 }
于 2012-11-22T12:02:07.987 に答える