Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

自定义按钮实现标签栏切换

$
0
0

最近由于快速开发的需要,换了一下口味,由之前的纯代码布局转向 StoryBoard 布局。在开发小型 IOS APP 时还是事半功倍的。本文先简要说说根据 StoryBoard 获取独立的 UIViewController 的几个步骤,以及自定义按钮实现底部标签栏切换。

1. 获取Storyboard中单独的控制器

有三种方式:
1> + (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil
上面的方法表示通过 storyboard 的名字从某个包中获取(一般设置为nil表示从主包中获取)storyboard;

2>- (id)instantiateInitialViewController
此方法获取到storyboard中初始的控制器;

3>- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;
此方法表示通过控制器的identifier获取到此控制器,Storyboard ID来表示某个控制器的identifier;

2. 在 storyboard 中设置单独的 UIViewController 的 identifier,即 Storyboard ID,用于区分 storyboard 中的控制器。

3. 在类中调用 storyboard 中的-instantiateViewControllerWithIdentifier: 方法获取出单独的VC

AViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:
NSStringFromClass([MainViewController class])]

4. push或modal出vc即可

 [self.navigationController pushViewController:vc animated:YES];

自定义按钮实现标签栏切换

- (void)replaceContent:(UIViewController *)replaceCtrl {

    if ([self.childViewControllers count] > 0) {
        UIViewController *oldCtrl = [self.childViewControllers objectAtIndex:0];
        [oldCtrl willMoveToParentViewController:nil];
        [oldCtrl removeFromParentViewController];
    }

    for (UIView *tempView in [self.contentView subviews]) {
        [tempView removeFromSuperview];
    }

    [self addChildViewController:replaceCtrl];
    replaceCtrl.view.frame = CGRectMake(0, 0, self.contentView.frame.size.width, self.contentView.frame.size.height);
    [self.contentView addSubview:replaceCtrl.view];
    [replaceCtrl didMoveToParentViewController:self];
}

结合前面所述,先根据 StoryBoard 获取独立的 UIViewController,然后将此 UIViewController 加到当前控制器上:

SetViewController *setCtrl = [[self storyboard] instantiateViewControllerWithIdentifier:
NSStringFromClass([SetViewController class])];

[self replaceContent:setCtrl];

注意点:

在调用 [父视图控制器 addChildViewController: 子视图控制器] 之前,无需显式调用 [子视图控制器 willMoveToParentViewController: 父视图控制器] 方法,因为已经默认调用了。
在调用 [父视图控制器 addChildViewController: 子视图控制器] 之后,要仅接着调用 [子视图控制器 didMoveToParentViewController: 父视图控制器] 方法。
在调用 [子视图控制器 removeFromParentViewController] 之前,必须先调用 [子视图控制器 willMoveToParentViewController:nil]。
在调用 [子视图控制器 removeFromParentViewController] 之后,无需显式调用 [子视图控制器 didMoveToParentViewController: 父视图控制器],因为已经默认调用了。

作者:huangfei711 发表于2017/7/18 21:07:11 原文链接
阅读:178 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles