У меня есть проект с несколькими файлами XIB. У меня есть класс switchViewController, который обрабатывает переключение представлений содержимого. Я хочу вызывать методы этого класса из других классов. У меня есть следующий код:
//SwitchViewController.h
Code:
#import <UIKit/UIKit.h>
@class MainMenuViewController;
@class GlassRepairsViewController;
@interface SwitchViewController : UIViewController {
MainMenuViewController *mainMenuViewController;
GlassRepairsViewController *glassRepairsViewController;
}
@property (retain,nonatomic) MainMenuViewController *mainMenuViewController;
@property (retain,nonatomic) GlassRepairsViewController *glassRepairsViewController;
-(IBAction)goToGlassRepairs;
-(IBAction)goToMainMenu;
@end
//switch view controller m file
Code:
#import "SwitchViewController.h"
#import "MainMenuViewController.h"
#import "GlassRepairsViewController.h"
@implementation SwitchViewController
@synthesize MainMenuViewController;
@synthesize GlassRepairsViewController;
- (void)viewDidLoad {
MainMenuViewController *mainMenuController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuView" bundle:nil];
self.mainMenuViewController = mainMenuController;
[self.view insertSubview:mainMenuController.view atIndex:0];
[mainMenuController release];
[super viewDidLoad];
}
//These IBActions are linked to buttons on the view that is linked to this class (swtichViewController) This works perfectly for showing different nibs
-(IBAction) goToGlassRepairs
{
if(self.glassRepairsViewController.view.superview == nil)
{
if(self.glassRepairsViewController == nil)
{
GlassRepairsViewController *glassRepairsController = [[GlassRepairsViewController alloc] initWithNibName:@"GlassRepairsView" bundle:nil];
self.GlassRepairsViewController =glassRepairsController;
[glassRepairsController release];
}
[mainMenuViewController.view removeFromSuperview];
[self.view insertSubview:glassRepairsViewController.view atIndex:0];
}
}
-(IBAction) goToMainMenu
{
if(self.mainMenuViewController.view.superview == nil)
{
if(self.mainMenuViewController == nil)
{
MainMenuViewController *mainMenuController = [[ MainMenuViewController alloc] initWithNibName:@"MainMenuView" bundle:nil];
self.mainMenuViewController = mainMenuController;
[mainMenuController release];
}
[glassRepairsViewController.view removeFromSuperview];
[self.view insertSubview:mainMenuViewController.view atIndex:0];
}
}
//MainMenuViewController.h
Code:
#import <UIKit/UIKit.h>
@class SwitchViewController;
@interface MainMenuViewController : UIViewController {
}
-(IBAction)goToGlass;
@end
//MainMenuViewController.m
Code:
#import "MainMenuViewController.h"
#import "SwitchViewController.h"
@implementation MainMenuViewController
-(IBAction)goToGlass
{
**//This is where I want to call the goToGlassRepairs method that is inside SwitchViewController's class...**
}
SwitchViewController - это класс, который обрабатывает, какие кончики отображать и удалять.
MainMenu и glassRepairs являются представлениями содержимого. Однако MainMenu должен получить доступ к методам в классе switchviewcontroller, чтобы разрешить навигацию из представления содержимого.
Я пробовал
`SwitchViewController *s = (SwitchViewController *)[[UIApplication sharedApplication] delegate];
[s goToGlassRepairs];`
Компилируется без предупреждений, но выдает следующие ошибки:
2010-03-09 15: 51: 28.350 Alfa2Go [29535: 207] *** - [GoAppDelegate goToGlassRepairs]: нераспознанный селектор, отправленный экземпляру 0x3b26620
2010-03-09 15: 51: 28.362 Go [29535: 207] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «*
- [GoAppDelegate goToGlassRepairs]: нераспознанный селектор отправлен на экземпляр 0x3b26620 '