Совместное использование данных между представлениями служебных приложений 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