簡體   English   中英

UIKit控制器/視圖之間切換視圖?

[英]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並采取兩種不同的視圖控制器說ViewAVCViewBVC這里面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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM