//
// MyGameViewController.h
//
#import< UIKit / UIKit.h>
#import“SecondViewController.h”@interface MyGameViewController:UIViewController {
IBOutlet SecondViewController * secondViewController;
}
- (IBAction为)goToSecondView;
@end
//
// MyGameViewController.m
//
#import“MyGameViewController.h”@implementation MyGameViewController
- (IBAction为)goToSecondView {
[self presentModalViewController:secondViewController animated:YES];
}
//
// MyGameView.h
//
#import< UIKit / UIKit.h>
#import“Sprite.h”@interface MyGameView:UIView {...}
目前我已经在MyGameView.xib上实现了一个按钮来调用secondViewController视图并且它可以工作。但我希望在中断时通过MyGameView.m内部编程来调用secondViewController,而不是通过按下按钮。因此,我认为有两种方法:
a)使goToSecondView方法可用于MyGameView.m
b)将MyGameViewController.h和MyGameViewController.m中的所有代码实现到MyGameView.m。
问题:
1)当试图使a)发生时,我必须以(void)而不是(IBAction)开始goToSecondView方法。但是如何在MyGameView.m中调用它?
2)我尝试做b)并将所有代码实现到MyGameView.m。但是presentModalViewController是ViewController的一个方法,在UIView中不起作用。那么解决方案是什么?
答案 0 :(得分:2)
如您所述,您无法在UIView类中调用presentModalViewController。这似乎是使用代表的绝佳机会。你可以做一些事情:
在MyGameView.h中
@protocol MyGameViewDelegate
- (void)showSecondView;
@end
@interface MyGameView {
}
@property (nonatomic, assign) id <MyGameViewDelegate> delegate;
...
@end
在MyGameView.m中,当您需要显示第二个视图时:
[self.delegate showSecondView];
在MyGameViewController.h中:
#import "MyGameView.h"
@interface MyGameViewController : UIViewController <MyGameViewDelegate> {
...
在MyGameViewController.m中:
#pragma mark MyGameViewDelegate methods
- (void)showSecondView {
[self goToSecondView];
}
请注意,您还需要将MyGameViewController设置为MyGameView的委托。您可以在Interface Builder或代码中执行此操作,具体取决于您创建两个对象的位置。
在代码中执行此操作,例如在MyGameViewController.h viewDidLoad方法中执行此操作:
myGameView.delegate = self;