對不起,如果是新手的問題。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