Как сослаться на переменную экземпляра AppDelegate из пользовательского действия контроллера? - PullRequest
3 голосов
/ 21 февраля 2011

Я хочу, чтобы у меня (в качестве обучающего упражнения для контроллеров) была кнопка в начальном представлении, которое я настроил, а затем, если вы нажмете кнопку, произойдет действие, которое поменяет представление с представления 1 на представление 2. Яне уверен как у тебя это?См. Раздел в приведенном ниже коде, где я хотел бы добавить код, который это делает.

Можно ли опубликовать нужный мне код?(то есть, что будет касаться ссылки на переменную, которую я установил в AppDelegate).Дайте мне знать, если это упражнение, которое я дал себе, где-то имеет недостатки.Спасибо.

AppDelegate * .h

#import <UIKit/UIKit.h>
@class gregsController;
@class Gregs2ndController;  

@interface windowsBasedAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    gregsController *viewController;
    Gregs2ndController *view2Controller;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet gregsController *viewController;
@property (nonatomic, retain) IBOutlet Gregs2ndController *view2Controller;

@end

AppDelegate * .m

#import "windowsBasedAppDelegate.h"
#import "gregsController.h"
#import "Gregs2ndController.h"

@implementation windowsBasedAppDelegate

@synthesize window;
@synthesize viewController;
@synthesize view2Controller;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.
    NSLog(@"windowsBasedAppDelegate - didFinishLaunchingWithOptions");

    //[self.window addSubview:viewController.view];
    [self.window addSubview:view2Controller.view];
    [self.window makeKeyAndVisible];

    return YES;
}

Пользовательский контроллер * .m

#import "gregsController.h"
@implementation gregsController
- (IBAction)logSomething {
    NSLog(@"About to switch views");
    [self.view removeFromSuperview];

        // *** HOW DO I REFERENCE view2Controller AND PUT THIS AS THE VIEW  ???? ****

    NSLog(@"Finished switching views");
}

Ответы [ 3 ]

7 голосов
/ 21 февраля 2011

Ссылка на вашего делегата приложения доступна везде, где вы хотите, через UIApplication singleton:

#import "gregsController.h"
@implementation gregsController
- (IBAction)logSomething {
    NSLog(@"About to switch views");
    [self.view removeFromSuperview];

    // *** HOW DO I REFERENCE view2Controller AND PUT THIS AS THE VIEW  ???? ****
    // Like this:
    windowsBasedAppDelegate* appDelegate = (windowsBasedAppDelegate*)[[UIApplication sharedApplication] delegate];
    [appDelegate.window addSubview:appDelegate.view2Controller.view];

    NSLog(@"Finished switching views");
}
1 голос
/ 21 февраля 2011

Вы можете получить доступ к вашему делегату приложения и изменить представление следующим образом:

#import "windowsBasedAppDelegate.h"

windowsBasedAppDelegate *delegate = (windowsBasedAppDelegate *) [[UIApplication sharedApplication] delegate];
view2Controller *view_controller = delegate.view2Controller;

[window addSubView:view_controller.view];
[window becomeKeyWindow];
1 голос
/ 21 февраля 2011

, чтобы получить ссылку на переменную, созданную в делегате приложения

testAppDelegate * appDelegate = (testAppDelegate *) [[UIApplication sharedApplication] делегат];

для ссылки на любую переменную из делегата приложения, например, вы можете использовать

appDelegate .view2Controller

...