0

//
// MyGameViewController.h
//
#import <UIKit / UIKit.h>
#import "SecondViewController.h"

@interface MyGameViewController:UIViewController {
IBOutlet SecondViewController * secondViewController;
}
-(IBAction)goToSecondView;
@終わり


//
// MyGameViewController.m
//
#import "MyGameViewController.h"

@implementation MyGameViewController

-(IBAction)goToSecondView {
[self presentModalViewController:secondViewControllerアニメーション:YES];
}


//
// MyGameView.h
//
#import <UIKit / UIKit.h>
#import "Sprite.h"

@interface MyGameView:UIView{…}

現在、MyGameView.xibにボタンを実装してsecondViewControllerビューを呼び出し、それが機能します。ただし、ボタンを押すのではなく、中断が発生したときにMyGameView.m内のプログラミングによってsecondViewControllerが呼び出されるようにします。したがって、2つのアプローチがあると思います。

a)goToSecondViewメソッドをMyGameView.mで使用できるようにします
。b)MyGameViewController.hおよびMyGameViewController.mのすべてのコードをMyGameView.mに実装します。

問題:
1)a)を起こそうとすると、(IBAction)ではなく(void)で始まるgoToSecondViewメソッドを作成する必要があります。しかし、MyGameView.mでそれを呼び出す方法は?
2)私はb)を実行しようとし、すべてのコードをMyGameView.mに実装しました。ただし、presentModalViewControllerはViewControllerのメソッドであり、UIViewでは機能しません。それで、解決策は何ですか?

4

1 に答える 1

2

あなたが述べたように、UIView クラスで presentModalViewController を呼び出すことはできません。これは、デリゲートを使用する絶好の機会のようです。次の行に沿って何かを行うことができます。

MyGameView.h 内

@protocol MyGameViewDelegate
- (void)showSecondView;
@end

@interface MyGameView {
}
@property (nonatomic, assign) id <MyGameViewDelegate> delegate;
...
@end

MyGameView.m で、2 番目のビューを表示する必要がある場合:

[self.delegate showSecondView];

MyGameViewController.h で:

#import "MyGameView.h"
@interface MyGameViewController : UIViewController <MyGameViewDelegate> {
...

MyGameViewController.m で:

#pragma mark MyGameViewDelegate methods

- (void)showSecondView {
    [self goToSecondView];
}

また、MyGameViewController を MyGameView のデリゲートに設定する必要があることに注意してください。2 つのオブジェクトを作成する場所に応じて、Interface Builder またはコードでこれを行うことができます。

MyGameViewController.h viewDidLoad メソッドなどのコードで行うには:

myGameView.delegate = self;
于 2010-12-10T15:00:04.540 に答える