几个UIViewController和OpenGLView(Cocos2D)之上的透明UITableView

时间:2012-09-07 11:58:43

标签: objective-c uitableview uiviewcontroller cocos2d-iphone uicolor

这是我的代码:

// View Controller with navigation bar
InAppPurchaseViewController *purchaseViewController = [[InAppPurchaseViewController alloc] init];
purchaseViewController.title = @"Magasin";
purchaseViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissViewController:)] autorelease];
UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:purchaseViewController] autorelease];

// Add `purchaseViewcontroller` TO container AND container ON openGLView
UIViewController *container = [[UIViewController alloc] init];
[container setView:[[CCDirector sharedDirector] openGLView]];
[container setModalTransitionStyle: UIModalTransitionStyleCoverVertical];
[container presentViewController:navController animated:YES completion:nil];

UITableView位于purchaseViewController中。

我正在考虑使用[UIColor clearColor],但是无论我使用它,我都会在UITableView上获得黑色背景。细胞变得不可选择且不可靠(除了进入细胞的元素外)

编辑:appdelegate

这是.h

@class AudioEngine;
@class RootViewController;
@class Score;

@interface AppDelegate : NSObject <UIApplicationDelegate, GameCenterManagerDelegate>

@property int CurrentPackage;
@property int CurrentScore;
@property int CurrentHighScore;
@property BOOL SoundShouldPlay;
@property BOOL PauseScreenUp;
@property(nonatomic, retain) AudioEngine *CustomAudioEngine;
@property(nonatomic, retain) GameCenterManager *CustomGameCenterManager;
@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, readonly) RootViewController *ViewController;
@property(nonatomic, retain) NSString* CurrentLeaderBoard;
@property(nonatomic, retain) NSMutableArray *TenLastScoresArray;

+(AppDelegate *)get;
-(void)connectToGameCenter;
-(void)addScoreToLastScore:(Score*)score;

该方法确实完成了启动

-(void)applicationDidFinishLaunching:(UIApplication*)application
{
    CC_DIRECTOR_INIT();
    self.CurrentLeaderBoard = kLeaderboardID;
    [[SKPaymentQueue defaultQueue] addTransactionObserver:[InAppPurchaseSingleton sharedHelper]];
    [AudioEngine preloadBackgroundMusic];
    [AudioEngine playBackgroundMusic:3];
    self.SoundShouldPlay = YES;
    [SceneManager goSplash];
}

1 个答案:

答案 0 :(得分:3)

而不是在container上显示视图控制器:

UIViewController *container = [[UIViewController alloc] init];
...
[container presentViewController:navController animated:YES completion:nil];

应该在cocos2D模板为您创建的根视图控制器上呈现它。它通常可以通过app delegate访问:

UIViewController *rootViewController = (UIViewController*)[(YOURAPPDELEGATE*)[[UIApplication sharedApplication] delegate] viewController];
[rootViewController presentViewController:navController animated:YES completion:nil];

viewController是一个ivar,cocos2D默认模板添加到应用程序委托类。它通常是私有的,因此您需要定义一个访问者:

@property (nonatomic, readonly) RootViewController *viewController; //-- .h file

@synthesize viewController; //-- .m file

希望这有帮助。

编辑:

基于我在app委托中的内容,我认为您可以尝试像这样实例化RootViewController:

    CC_DIRECTOR_INIT
ViewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
ViewController.wantsFullScreenLayout = YES;
[ViewController setView:[[CCDirector sharedDirector] openGLView]];
    ...