[英]UIKit controller/view to switch between views?
很抱歉,如果是新手問題。
我有UISegmentedControl
我的控制器/視圖。 我需要在控制器/視圖之間切換,以使視圖占據屏幕的其余部分。 這個想法與UITabBarController
非常相似,但是切換控件不是選項卡按鈕而是段控件。 如何根據iOS設計和實踐來實現?
您可以在添加UISegmentedControl的基礎上進行視圖,並在BASE視圖控制器中處理click事件。 在分段控件上,單擊事件只需在基本視圖上添加和刪除相應的視圖控制器即可。
創建一個容器viewController並包含以下邏輯:
@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];
}
你能做什么,有一個主要的ViewController與段,說MainViewC
並采取兩種不同的視圖控制器說ViewAVC
和ViewBVC
這里面MainViewC
添加要在ViewA和ViewB中顯示的所有子視圖。
通過為每個ViewController設置適當的幀,將這些View Controller添加到MainViewC
。
現在,當您添加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:
檢查段的當前選定值是什么,然后隱藏一個視圖並取消隱藏其他視圖。
這樣,您將擁有獨立的View Controller,但是當您希望在這些View Controller和MainViewC
之間進行交互時,您將需要添加一些委托
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.