如何调用ViewController的方法来显示第二个视图?

时间:2010-12-10 08:58:55

标签: iphone uiview uiviewcontroller interrupt-handling

  

//
  // 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中不起作用。那么解决方案是什么?

1 个答案:

答案 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;