对不起,如果是新手的问题。UIKit控制器/视图在视图之间切换?
我有我的控制器/查看UISegmentedControl
。我需要在控制器/视图之间切换,让视图占用屏幕的其余部分。这个想法与UITabBarController
非常相似,但切换控件不是选项卡按钮,而是段控件。我如何根据iOS设计和实践来实现它?
对不起,如果是新手的问题。UIKit控制器/视图在视图之间切换?
我有我的控制器/查看UISegmentedControl
。我需要在控制器/视图之间切换,让视图占用屏幕的其余部分。这个想法与UITabBarController
非常相似,但切换控件不是选项卡按钮,而是段控件。我如何根据iOS设计和实践来实现它?
创建容器的viewController,包括TIS逻辑:
@property (nonatomic, strong) UISegmentedControl *segmentedControl;
@property (nonatomic, strong) NSMutableArray *viewControllers;
@property (nonatomic, weak) UIView *containerView;
@property (nonatomic) NSInteger currentSelectedIndex;
_segmentedControl = [[UISegmentedControl alloc] initWithItems:nil];
[_segmentedControl addTarget:self action:@selector(changeViewController:) forControlEvents:UIControlEventValueChanged];
- (void)changeViewController:(UISegmentedControl *)segmentedControl
{
UIViewController *oldViewController = self.viewControllers[self.currentSelectedIndex];
UIViewController *newViewController = self.viewControllers[segmentedControl.selectedSegmentIndex];
[self willTransitionToViewController:newViewController];
[self transitionFromViewController:oldViewController
toViewController:newViewController
duration:0
options:UIViewAnimationOptionTransitionNone
animations:nil
completion:^(BOOL finished) {
if (finished)
[self didTransitionToViewController:newViewController];
}];
}
- (void)showFirstViewController
{
UIViewController *firstViewController = [self.viewControllers firstObject];
// set required the frame
firstViewController.view.frame = self.containerView.bounds;
firstViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
[self.containerView addSubview:firstViewController.view];
[self willTransitionToViewController:firstViewController];
[self didTransitionToViewController:firstViewController];
}
- (void)willTransitionToViewController:(UIViewController *)viewController
{
if (self.currentSelectedIndex != UISegmentedControlNoSegment)
{
UIViewController *oldViewController = self.viewControllers[self.currentSelectedIndex];
[oldViewController willMoveToParentViewController:nil];
}
viewController.containerView.frame = self.ContainerView.bounds;
viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
}
- (void)didTransitionToViewController:(UIViewController *)viewController
{
[viewController didMoveToParentViewController:self];
self.segmentedControl.selectedSegmentIndex = [self.viewControllers indexOfObject:viewController];
self.currentSelectedIndex = [self.viewControllers indexOfObject:viewController];
}
您可以在基本视图上添加一个UISegmentedControl并处理BASE视图控制器中的click事件。 在段控件单击事件上,只需添加和删除基本视图中的相应视图控制器即可。
你能提供一个例子吗?我需要为每个“部分”单独控制器/视图 – 4ntoine
请通过以下链接描述相同http://stackoverflow.com/questions/9110567/switching-viewcontrollers-with-uisegmentedcontrol-in-ios5 –
你能做什么,有一个主要的ViewController与段,说MainViewC
和采取两种不同的视图控制器说ViewAVC
和ViewBVC
这里面MainViewC
添加您想要在ViewA和ViewB中显示的所有子视图。
将这些视图控制器添加到MainViewC
并为每个ViewController设置适当的框架。
现在,当你添加segmentControl您可以通过以下方式
itemArray = [NSMutableArray arrayWithObjects: @"Zero", @"One", nil];
seg = [[UISegmentedControl alloc] initWithItems:itemArray];
[seg setFrame:segRect];
seg.segmentedControlStyle = UISegmentedControlStyleBar;
seg.momentary = NO;
[seg addTarget:self action:@selector(someAction:) forControlEvents: UIControlEventValueChanged];
[mainView addSubview:seg];
在此功能someAction:
检查什么是段的当前选择的价值和隐藏一个视图,并取消隐藏其他添加的目标函数。
这样,您将拥有独立的视图控制器,但是当你希望这些视图控制器之间互动MainViewC
你将需要添加一些代表
will this将新选定的控制器设置为当前并将其视图显示在整个屏幕上? – 4ntoine
是的。您需要添加段控件以查看并在段控件下添加一个容器视图,并将viewControllers视图添加到容器视图。 –
不,我需要使视图仅占用分段控件下方的部分屏幕,而不是仅设置新的控制器/视图。 – 4ntoine