Как вызвать метод ViewController для отображения 2nd View? - PullRequest
0 голосов
/ 10 декабря 2010

//
// MyGameViewController.h
//
#import
#import "SecondViewController.h"

@интерфейс MyGameViewController: UIViewController {
IBOutlet SecondViewController * secondViewController;
}
- (IBAction) goToSecondView;
@end


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

@ реализация MyGameViewController

- (IBAction) goToSecondView {
[self presentModalViewController: secondViewController animated: YES];
}


//
// MyGameView.h
//
#import
#import "Sprite.h"

@ interface MyGameView: UIView {…}

В настоящее время я реализовал кнопку в MyGameView.xib для вызова представления secondViewController, и оно работает.Но я хочу, чтобы secondViewController вызывался программированием внутри MyGameView.m, когда происходит прерывание, а не нажатием кнопки.Поэтому я думаю, что есть 2 подхода:

a) Либо сделайте метод goToSecondView доступным для MyGameView.m
b) Реализуйте весь код в MyGameViewController.h и MyGameViewController.m для MyGameView.m.

Проблемы:
1) При попытке выполнить a) мне нужно создать метод goToSecondView, начинающийся с (void), а не (IBAction).Но тогда как вызвать его в MyGameView.m?
2) Я попытался сделать б) и реализовал весь код в MyGameView.m.Но presentModalViewController является методом ViewController и не работает в UIView.Так в чем же решение?

1 Ответ

2 голосов
/ 10 декабря 2010

Как вы сказали, вы не можете вызвать presentModalViewController в классе UIView. Это похоже на прекрасную возможность использовать делегата. Вы могли бы сделать что-то вроде:

В 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. Вы можете сделать это в Интерфейсном Разработчике или в коде, в зависимости от того, где вы создали два объекта.

Чтобы сделать это в коде, например, в методе MyDameViewController.h viewDidLoad:

myGameView.delegate = self;
...