Совместное использование данных между представлениями служебных приложений IOS

Я создал очень простое приложение, используя шаблон приложения-утилиты в Xcode 4.2, в котором я хочу получить целочисленную переменную, полученную из ползунка или текстового поля в моем FlipsideViewController, доступную в моем MainViewController.

Я искал час по глобальным переменным, но не могу найти хороший простой ответ, который подходит для моего конкретного случая.

Пожалуйста помоги

(примечание: я очень новичок в разработке для IOS и цели C. Приведите свой ответ для меня настолько, насколько вы способны!)

большое спасибо

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

FlipSideViewController.h

#import <UIKit/UIKit.h>

@class FlipsideViewController;

@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end

@interface FlipsideViewController : UIViewController

@property (weak, nonatomic) id <FlipsideViewControllerDelegate> delegate;

- (IBAction)done:(id)sender;
- (IBAction)sliderChange:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *sliderValueOnFlipside;

@end

FlipSideViewController.m

#import "FlipsideViewController.h"

@interface FlipsideViewController ()

@end

@implementation FlipsideViewController
@synthesize sliderValueOnFlipside;

- (void)viewDidLoad
{
    [super viewDidLoad];

}

- (void)viewDidUnload
{
    [self setSliderValueOnFlipside:nil];
    [super viewDidUnload];

}

- (BOOL)shouldAutorotateToInterfaceOrientation:    (UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

#pragma mark - Actions

- (IBAction)done:(id)sender
{
    [self.delegate flipsideViewControllerDidFinish:self];
}

- (IBAction)sliderChange:(id)sender {
    UISlider *slider = (UISlider *) sender;
    int var = [slider value];

    sliderValueOnFlipside.text = [NSString stringWithFormat:@"Slider Value is %d",var];
}

@end

MainViewController.h

#import "FlipsideViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate>

- (IBAction)showInfo:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *sliderValueOnMain;

@end

MainViewController.m

#import "MainViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController
@synthesize sliderValueOnMain;

- (void)viewDidLoad
{
    [super viewDidLoad];



    sliderValueOnMain.text = [NSString stringWithFormat:@"Slider Value from flipside is %d", var];
}

- (void)viewDidUnload
{
    [self setSliderValueOnMain:nil];
    [super viewDidUnload];

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

#pragma mark - Flipside View

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
{
    [self dismissModalViewControllerAnimated:YES];
}

- (IBAction)showInfo:(id)sender
{    
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideViewController" bundle:nil];
    controller.delegate = self;
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
}

@end

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

1 ответ

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

Если вы хотите, чтобы метод в MainViewController реагировал на изменение состояния в FlipsideViewController, то вы могли бы сделать MVC делегатом FVC и заставить FVC вызывать метод MVC при изменении значения.

Здесь есть хорошее объяснение шаблона проектирования делегата: http://mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

Другие вопросы по тегам