使用Cocos2d中的UIReferenceLibraryViewController(2.0)

时间:2012-09-02 19:41:37

标签: ios5 cocos2d-iphone

由于某种原因,整天都在苦苦挣扎,希望有人可以对此有所了解。

我已经设置了CCLabelTTF并为其添加了触摸处理程序,在触摸端我想在UIReferenceLibraryViewController中查找该标签的字符串值。这是我的尝试(我的游戏处于横向模式,这就是我尝试90度旋转的原因):

if(NSClassFromString(@"UIReferenceLibraryViewController")) {

                if ([UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word.Value] == YES)
                {
                     UIReferenceLibraryViewController *reference =
                    [[UIReferenceLibraryViewController alloc] initWithTerm:word.Value];
                    reference.view.center = CGPointMake(winSize.width/2, winSize.height/2);
                    reference.view.transform = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS(90.0f));

                    [[[CCDirector sharedDirector] view] addSubview:reference.view];
                }
            }

这种类型的有效。我点击我的标签,显示UIReferenceLibraryViewController(虽然由于某种原因它没有在横向上旋转),我的定义显示出来。然而,当我点击UIReferenceLibraryViewController中的“完成”按钮时,我的应用程序崩溃了EXEC_BAD_ACCESS。图我在这里遗漏了一些明显的东西,但不确定是什么。

当然,任何帮助都是适用的。

感谢
穆斯塔法

1 个答案:

答案 0 :(得分:0)

我有类似的问题。就我而言,我在我班级的方法中声明并实例化UIReferenceLibraryViewController对象。选择“完成”按钮时收到错误,因为我的UIReferenceLibraryViewController对象在此时不再存在。 为了解决这个问题,我在类接口中创建了一个成员变量:

UIReferenceLibraryViewController *reference;

然后我用retain创建了一个属性:

@property (retain) UIReferenceLibraryViewController *reference;

在我想要提供字典屏幕的方法中,确实使用了以下内容:

reference = [[UIReferenceLibraryViewController alloc] initWithTerm:cell.textLabel.text];
[[[CCDirector sharedDirector] openGLView] addSubview:reference.view];

然后我在dealloc方法中释放了引用对象。 不幸的是,它不再崩溃,但“完成”按钮现在什么也没做。

其他信息: 最终我的应用程序正在运行。我的应用程序在CCScene上添加了一个UITableView,允许用户单击一个表格视图单元格,以查找单元格中单词的定义。

为了实现这一目标,我做了以下工作: 在我的CCScene类(Game.m)中,我创建了一个UITableView。然后我创建一个UITableViewController类并设置UITableView dataSource并委托给那个新类。

myTableView.dataSource = myWordListViewController;
myTableView.delegate = myWordListViewController;

然后我将UITableView添加为CCScene的子视图,如下所示;

[[[CCDirector sharedDirector] openGLView] addSubview:myTableView];

CCScene类有一个成员变量(称为委托),它是我的AppDelegate类的一个实例。 AppDelegate类有一个成员变量,它是RootViewController的一个实例。

RootViewController  *viewController;

所以,现在我向用户展示了一个UITableView(在CCScene之上)。此表视图包含单词列表。我现在需要确保表格视图单元格在单击时显示字典定义。

在MyWordListViewController(UITableViewController)中,我确保存在允许此类充当数据源并为我的表视图委派的方法。

<UITableViewDelegate, UITableViewDataSource>

此外,当用户单击UITableView中的单元格(即CCSCENE的子视图)时,我希望字典显示在表格视图的顶部。

我正在响应用户点击MyWordListViewController的didSelectRowAtIndexPath方法。由于我将表视图添加为CCScene(Game.m)的子视图,因此我需要使用我的CCScene所依赖的AppDelegate RootViewController。

为此,我向MyWordListViewController添加了一个成员变量,该变量包含AppDelegate类的实例。

delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate];

现在在MyWordListViewController的didSelectRowAtIndexPath方法中,我可以依靠AppDelegate类中的RootViewController变量在表视图上显示字典。

reference = [[UIReferenceLibraryViewController alloc] initWithTerm:cell.textLabel.text];

[delegate.viewController presentModalViewController:reference animated:YES];

它可能不是最有说服力的解决方案,但它有效。