Я следил за несколькими руководствами по передаче данных между контроллерами представлений, но они, похоже, связаны с установкой свойства secondViewController в любом эквиваленте a - (void) goToNextView. Я пытаюсь понять, как назначить значение свойства во втором контроллере представления с первого раза, используя контроллер панели вкладок, созданный в делете приложения.Передача данных UISlider от контроллера представления XIB к контроллеру View, отличного от XIB, с UITabBarController
Текущая установка:
AppDelegate.m
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
...
UITabBarController *tbc = [[UITabBarController alloc] init];
FirstViewController *vc1 = [[FirstViewController alloc] init];
SecondViewController *vc2 = [[SecondViewController alloc] init];
[tbc setViewControllers: [NSArray arrayWithObjects: vc1, vc2, nil]];
[[self window] setRootViewController:tbc];
[self.window makeKeyAndVisible];
return YES;
}
...
@end
FirstViewController.h
#import "SecondViewController.h"
@interface FirstViewController : UIViewController
{
SecondViewController *vc2;
IBOutlet UISlider *sizeSlider;
}
@property (nonatomic, retain) SecondViewController *vc2;
@property (strong, nonatomic) UISlider *mySlider;
-(IBAction) mySliderAction:(id)sender;
@end
FirstViewController.m
#import "FirstViewController.h"
#import "SecondViewController.h"
@implementation FirstViewController
@synthesize vc2, mySlider;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
UITabBarItem *tbi = [self tabBarItem];
[tbi setTitle:@"xib"];
}
return self;
}
...
- (IBAction) mySliderAction:(id)sender
{
NSString *str = [[NSString alloc] initWithFormat:@"%3.2f", mySlider.value];
if(self.vc2 == nil)
{
SecondViewController *viewTwo = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
self.vc2 = viewTwo;
}
vc2.sliderValueString = str;
}
...
@end
SecondViewController.h
#import <UIKit/UIKit.h>
#import "myView.h"
@interface SecondViewController : UIViewController
{
NSString *sliderValueString;
}
@property (copy) NSString *sliderValueString;
@end
SecondViewController.m
#import "SecondViewController.h"
@implementation SecondViewController
@synthesize sliderValueString;
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle
{
self = [super initWithNibName:nil bundle:nil];
if (self) {
UITabBarItem *tbi = [self tabBarItem];
[tbi setTitle:@"View 2"];
}
return self;
}
-(void) loadView
{
CGRect frame = [[UIScreen mainScreen] bounds];
myView *view = [[myView alloc] initWithFrame:frame];
printf("Slider Value: %s", [sliderValueString UTF8String]);
[self setView: view];
}
...
@end
myView.h и .m, скорее всего, не имеет отношения к вопросу, но у меня есть .h подклассов UIView и .m создания представления с - (id) initWithFrame: (CGRect) frame
Я предполагаю, что я назначаю свойство второго VC в неправильном месте (mySliderAction), учитывая, что printf() во втором VC пуст, поэтому мой вопрос : где должно быть назначено свойство, или что я делаю неправильно, что препятствует тому, чтобы второй VC разрешал ему sliderValueSt чтобы не было (или оставлено) назначено?
Спасибо!
Спасибо! Решила проблему! – user2280110