我正在使用带有UISegment的视图控制器。
点击分段控制器而不是导航到UIVIew我正在使用UIVIEWcontrolers。
这是我的代码
.h文件
@property (weak, nonatomic) IBOutlet UIView *containerView;
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmenter;
- (IBAction)showComponent:(UISegmentedControl *)sender;
@property (weak, nonatomic) UIViewController *currentViewController;
-(void)loadViewFromData;
.m文件
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appD = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if ([[appD.defaults objectForKey:@"segment"] isEqualToString:@"index0"]) {
self.currentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllr1"];
self.segmenter.selectedSegmentIndex = 0;
[self.segmenter sendActionsForControlEvents:UIControlEventValueChanged];
}else{
self.currentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllr2"];
self.segmenter.selectedSegmentIndex = 1;
[self.segmenter sendActionsForControlEvents:UIControlEventValueChanged];
}
// self.currentViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
// [self addChildViewController:self.currentViewController];
// [self addSubview:self.currentViewController.view toView:self.containerView];
// //[self changeSegment];
[self.segmenter addTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged];
// Do any additional setup after loading the view.
}
- (void)changedSegmentedControl:(UISegmentedControl*)sender
{
NSLog(@"Changed value of segmented control to %ld", sender.selectedSegmentIndex);
NSLog(@"self.segmenter value of segmented control to %ld", self.segmenter.selectedSegmentIndex);
// Code to change View Controller goes here
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
}
-(void)loadViewFromData{
// [self viewDidLoad];
// [self viewWillAppear:YES];
// [self reloadInputViews];
self.segmenter.selectedSegmentIndex = 1;
[self changedSegmentedControl:self.segmenter];
[self.segmenter sendActionsForControlEvents:UIControlEventValueChanged];
}
-(void)changeSegment{
AppDelegate *appD = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if ([[appD.defaults objectForKey:@"segment"] isEqualToString:@"index0"]) {
self.currentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllr1"];
}else{
self.currentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllr2"];
self.segmenter.selectedSegmentIndex = 1;
}
self.currentViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[self addChildViewController:self.currentViewController];
[self addSubview:self.currentViewController.view toView:self.containerView];
}
- (IBAction)showComponent:(UISegmentedControl *)sender {
if (sender.selectedSegmentIndex == 0) {
UIViewController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllr1"];
newViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[self cycleFromViewController:self.currentViewController toViewController:newViewController];
self.currentViewController = newViewController;
} else {
UIViewController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllr2"];
newViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[self cycleFromViewController:self.currentViewController toViewController:newViewController];
self.currentViewController = newViewController;
}
}
- (void)cycleFromViewController:(UIViewController*) oldViewController
toViewController:(UIViewController*) newViewController {
[oldViewController willMoveToParentViewController:nil];
[self addChildViewController:newViewController];
[self addSubview:newViewController.view toView:self.containerView];
newViewController.view.alpha = 0;
[newViewController.view layoutIfNeeded];
[UIView animateWithDuration:0.5
animations:^{
newViewController.view.alpha = 1;
oldViewController.view.alpha = 0;
}
completion:^(BOOL finished) {
[oldViewController.view removeFromSuperview];
[oldViewController removeFromParentViewController];
[newViewController didMoveToParentViewController:self];
}];
}
- (void)addSubview:(UIView *)subView toView:(UIView*)parentView {
[parentView addSubview:subView];
NSDictionary * views = @{@"subView" : subView,};
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[subView]|"
options:0
metrics:0
views:views];
[parentView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subView]|"
options:0
metrics:0
views:views];
[parentView addConstraints:constraints];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
我从另一个视图控制器调用loadViewFromData
并将appD.defults值更改为“index1”但不重定向
如果我试图通过代码选择第二个片段,即通过selectedSegmentIndex从外部调用,则它无法正常运行且无法重定向。
如果我单击并选择一个正常运行的片段,则手动。