精华内容
下载资源
问答
  • UIViewController

    2019-10-05 18:17:34
    UIViewController 目录 概述 UIViewController之间的迁移 概述 UIViewController之间的迁移 IOS编程中,视图间的跳转有三种方式,方式一:把一个视图添加到另一个视图控制器的视图上作为其子视图,...

    UIViewController

     

    目录

    • 概述
    • UIViewController之间的迁移

     

    概述

     

    UIViewController之间的迁移

    IOS编程中,视图间的跳转有三种方式,方式一:把一个视图添加到另一个视图控制器的视图上作为其子视图,要离开此视图时,把该视图移除(不推荐);方式二:一次显示一个视图控制器,然后从一个视图控制器迁移到另一个;方式三:运用UINavigationController的push和pop; 

    方法一

      把一个视图添加到另一个视图控制器的视图上作为其子视图(覆盖VIew达到切换效果);

      使用到的相关函数:

               -(void)addSubview:(UIView *)view;

               -(void)removeFromSuperview;

    方法二

      一次显示一个视图控制器然后从一个视图控制器迁移到另一个;

      相关函数:

        -(void)presentViewController:(UIViewController *)viewControllerToPresentanimated:(BOOL)flag completion:(void (^)(void))completion

        -(void)dismissViewControllerAnimated:(BOOL)flag completion:(void(^)(void))completion

    设置迁移的动画效果

        self.secondVC.modalTransitionStyle =UIModalTransitionStyleCrossDissolve等等;

    方法三

      结合UINavigationController

    待解决

      UIView视图的子视图里面的页面跳转

     

    转载于:https://www.cnblogs.com/IOS-Developer/p/4296682.html

    展开全文
  • UIViewController添加多个UIViewController。可以把UIViewController的View当作容器,让其他UIViewController添加进该View,并可以在多个UIViewController间切换。
  • IOS UIViewController

    2019-10-09 03:23:56
    所以UIViewController是IOS应用当中非常常用而且很重要的一个类。  一,UIViewController:一般使用都是自己写一个类继承UIViewController这个类。在UIViewController里面有一个很重要的属性那就是View,也就是这...

      IOS里面采用了MVC的体系结构,在UI方便的具体表现为View加ViewController。所以UIViewController是IOS应用当中非常常用而且很重要的一个类。

      一,UIViewController:一般使用都是自己写一个类继承UIViewController这个类。在UIViewController里面有一个很重要的属性那就是View,也就是这个Controller对应的View,MVC里面的V和C。可以通过覆盖其中的loadView方法来手动创建View然后把它设置到Controller的属性中。

      除了直接用代码实例化View以外,还有一种很常用的方法,那就是xib文件。xib文件可以记录固化的view实例,它是由xcode的interface builder来生成和编辑的。编辑好xib以后也是可以在controller中将其载入。

      载入xib需要覆盖Controller中的:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nil bundle:nil];
        
        if(self != nil)
        {
            UITabBarItem *tbi = [self tabBarItem];
            
            [tbi setTitle:@"Time"];
            
            UIImage *img = [UIImage imageNamed:@"Time.png"] ;
            [tbi setImage:img];
            
        }
        return self;
    }

      其中调用父类的时候两个参数都设置为了nil,这样的话,程序会在程序包里面寻找名字与类相同的xib文件进行载入。也可以指定文件的名字和程序包:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        NSBundle *appBundle = [NSBundle mainBundle] ;
        
        self = [super initWithNibName:@"TimeViewController" bundle:appBundle];
        
        if(self != nil)
        {
            UITabBarItem *tbi = [self tabBarItem];
            
            [tbi setTitle:@"Hypnosis"];
            
            UIImage *img = [UIImage imageNamed:@"Hypno.png"] ;
            [tbi setImage:img];
        }
        return self;
    }

     二,UITabBarController:

      我们看到的应用很多都是用到了底部的一个导航条,而UITabBarController就可以很好的实现这个功能。只要为UITabBarController设置一组UIViewController,它就会自动生成一个导航条。创建一个导航条:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        
        // Override point for customization after application launch.
        
        //creat controllers and group
        HypnosisViewController *hvc =[[HypnosisViewController alloc] init];
        [[self window] setRootViewController:hvc];
        
        TimeViewController *tvc = [[TimeViewController alloc] init];
        [[self window] setRootViewController:tvc];
        
        NSArray *viewControllers = [[NSArray alloc] initWithObjects:hvc,tvc,nil];
        
        UITabBarController *tabBarController = [[UITabBarController alloc] init];
        [tabBarController setViewControllers:viewControllers];
        
        //set view root controller
        [[self window] setRootViewController:tabBarController];
        
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        return YES;
    }

    默认的导航条的每一个tab都对应一个黑色的按钮没有任何东西,若想要定制每一个tab选项的显示,则可以分别设置UIViewController当中的UITabBarItem属性来做到:

    UITabBarItem *tbi = [self tabBarItem];
            
            [tbi setTitle:@"Time"];
            
            UIImage *img = [UIImage imageNamed:@"Time.png"] ;
            [tbi setImage:img];

    三,关于UIViewController的生命周期:

    1,初始化UIViewController:通过alloc,init一类的方法来创建和初始化。

      对view的设置是必需的,但是我们不能在init方法中写任何由关于view的代码。因为view在有可能在被释放和重新载入,而init方法只有在初始化阶段才会执行,也就是说当view因为一些原因(比如说内存不足警告)被释放和重新载入以后写在init里面有关view的代码是不会被执行的。所以初始化view的代码应该在viewDidLoad方法里面写。

    2,View在UIViewController中的载入有一种叫做延迟载入的机制,只有当view需要被放到屏幕上时controller才会将其载入。

    3,视图的卸载:

      视图卸载在有一些情况下不能依靠自动,因为有可能会造成内存泄露。如果视图控制对象没有指向子视图的强引用,就不需要手动释放(覆盖viewDidUnload方法),否则需要手动对相关视图进行释放。

      为了避免由引用带来的内存泄露问题,通常都会将插头变量(IBOutlet)声明了弱引用。但是有一个例外:凡是针对xib文件中的顶层视图的对象的引用,必须使用强引用。

     

      学习笔记,仅供参考

    转载于:https://www.cnblogs.com/nightwolf/p/3223830.html

    展开全文
  • UIViewController生命周期

    2014-06-11 15:04:59
    UIViewController

    UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下:

    调试日志:

    2013-07-14 12:15:49.048 VCTest[13412:907] initWithNibName:bundle  /  initWithCoder #如果使用的StoryBoard
    2013-07-14 12:15:49.056 VCTest[13412:907] loadView
    2013-07-14 12:15:49.059 VCTest[13412:907] viewDidLoad
    2013-07-14 12:15:49.061 VCTest[13412:907] viewWillAppear
    2013-07-14 12:15:49.078 VCTest[13412:907] viewWillLayoutSubviews
    2013-07-14 12:15:49.083 VCTest[13412:907] viewDidLayoutSubviews
    2013-07-14 12:15:49.445 VCTest[13412:907] viewDidAppear
    2013-07-14 12:16:00.624 VCTest[13412:907] viewWillDisappear
    2013-07-14 12:16:00.997 VCTest[13412:907] viewDidDisappear

    1. initWithNibName:bundle

    初始化UIViewController,执行关键数据初始化操作,注意这里不要做view相关操作,view在loadView方法中才初始化,这时loadView还未调用。如果使用StoryBoard进行视图管理,程序不会直接初始化一个UIViewController,StoryBoard会自动初始化或在segue被触发时自动初始化,因此方法initWithNibName:bundle:不会被调用。如果在代码里面使用instantiateViewControllerWithIdentifier:方法显示初始化一个UIViewController,则initWithCoder方法会被调用。

    如果是通过调用initWithNibName:bundle指定nib文件名初始化的话,ViewController会根据此nib来创建View。如果name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib:
    1)如果ViewController的类名以“Controller”结尾,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;
    2)找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib

    2. loadView

    当访问UIViewController的view属性时,view如果此时是nil,那么VC会自动调用loadView方法来初始化一个UIView并赋值给view属性。此方法用在初始化关键view,需要注意的是,在view初始化之前,不能先调用view的getter方法,否则将导致死循环(除非先调用了[supper loadView];)。

    -(void)loadView{
        NSLog(@"loadView");
        //错误,将导致死循环,因此此时view=nil,VC会再次调用loadView来初始化view
        self.view.backgroundColor = [UIColor greenColor];
    }
    
    -(void)loadView{
        NSLog(@"loadView");
        //正确,先初始化view
        self.view = [[MyView alloc] init];
        self.view.backgroundColor = [UIColor greenColor];
    }

    如果没有重载loadView方法,则UIViewController会从nib或StoryBoard中查找默认的loadView,默认的loadView会返回一个空白的UIView对象。

    3. viewDidLoad

    当VC的view对象载入内存后调用,用于对view进行额外的初始化操作

    4. viewWillAppear

    在view即将添加到视图层级中(显示给用户)且任意显示动画切换之前调用(这个时候supperView还是nil)。这个方法中完成任何与视图显示相关的任务,例如改变视图方向、状态栏方向、视图显示样式等

    5. viewDidAppear

    在view被添加到视图层级中,显示动画切换之后调用(这时view已经添加到supperView中)。在这个方法中执行视图显示相关附件任务,如果重载了这个方法,必须在方法中调用[supper viewDidAppear];

    6. viewWillLayoutSubviews

    view即将布局其Subviews。比如view的bounds改变了(例如状态栏从不显示到显示,视图方向变化),要调整Subviews的位置,在调整之前要做的一些工作就可以在该方法中实现。

    7. viewDidLayoutSubviews

    view已经布局其Subviews。比如view的bounds改变了(例如状态栏从不显示到显示,视图方向变化),已经调整Subviews的位置,在调整完成之后要做的一些工作就可以在该方法中实现。

    8. viewWillDisappear

    view即将从superView中移除且移除动画切换之前,此时还没有调用removeFromSuperview。

    9. viewDidDisappear

    view从superView中移除,移除动画切换之后调用,此时已调用removeFromSuperview。

    10. viewWillUnload

    在VC的view对象从内存中释放之前调用,可以在view被释放前做一些资源清理操作。在iOS6.0开始就废弃了,该方法不再会调用

    11. viewDidUnload

    在VC的view对象从内存中释放之后调用,可以在view被释放后做一些view相关的引用清理操作,此时view为nil。在iOS6.0开始就废弃了,该方法不再会调用

    展开全文
  • UIViewController简介

    2019-10-01 20:39:14
    UIViewController也是UIResponder对象,在responder chain中的位置处于UIViewController的根视图和其父视图之间 如果view controller内的视图都不处理事件,那么view controller将会处理事件、或者将事件传递给视图...

    主要工作:

    1. 更新view,修改view数据
    2. 响应用户交互
      • UIViewController也是UIResponder对象,在responder chain中的位置处于UIViewController的根视图和其父视图之间
      • 如果view controller内的视图都不处理事件,那么view controller将会处理事件、或者将事件传递给视图的父视图
    3. 管理view布局,调整view大小

    为view controller指定view

    1. 通过storyboard加载view,同时能指定view controller和view之间的关联,还能指定viewcontrollers之间的关联
      • 使用instantiateViewControllerWithIdentifier:获取UIStoryBoard对象
    2. 通过nib file创建views
      • 使用initWithNibName:bundle:来进行viewcontroller初始化
    3. 使用loadview
      • 在loadview方法中手动代码创建view和视图之间的关系

    view controller的根视图(root view)总是会适应指定的空间,而其他view则需要使用 Auto Layout来自适应布局

    管理view

    • @property(nonatomic, strong) UIView *view
      • view controller的root view,默认为空
      • 当访问这个属性且这个属性为空时,view controller会自动调用loadview方法,并返回loadview返回的view
      • 每个view controller都是root view唯一的拥有者
      • 当低内存时view controller会将view赋为nil
    • -(void)loadView
      • 当属性view为nil时,加载或者创建view并assign给属性view
      • 当view controller有一个相关联的nib file文件,这个方法将会从nib file中加载view
      • 如果是通过 Interface Builder 方式创建的view,请不要override这个方法
      • 如果是希望通过手动代码创建view,可以重载这个方法
      • 有更多view相关的初始化操作 ,可以在viewdidload中进行
      • 不要在这个方法里调用 [supper loadView] 或者 self.view
    • -(void)viewDidLoad
      • 当controller's view 后会被调用
      • 通过nib file加载view 还是通过loadview中手动创建view 都会调用viewdidload

    展示view controller

    • -(void)showViewController:(UIViewController *)vc sender:(id)sender
      • 目的就是简化编程,省去判断一些条件。比如,会自动为nav controller有关的vc调用push,而为普通的view controller调用present函数。
    • -(void)showDetailViewController:(UIViewController *)vc sender:(id)sender
      • 为了UISplitViewController 而写的高级版showViewController
    • -(void)presentViewController:(UIViewController*)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
      • 传统的模态跳转方法
    • -(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
      • 与presentViewController搭配使用

    配置view布局行为

    • -(void)viewWillLayoutSubviews
      • 通知view controller它的view将要布局subviews
    • -(void)viewDidLayoutSubviews
      • 通知view controller的view subviews已经完成布局
        • addSubview会触发layoutSubviews
        • 设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
        • 滚动一个UIScrollView会触发layoutSubviews
        • 旋转Screen会触发父UIView上的layoutSubviews事件
        • 改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
    • -(void)updateViewConstraints
      • 当view controller的view需要更新约束的时候

    转载于:https://www.cnblogs.com/sunyanyan/p/5368271.html

    展开全文
  • iOS UIViewController

    2019-10-03 00:23:00
    UIViewController 转载于:https://www.cnblogs.com/longyun/p/3732522.html
  • UIViewController present出来一个透明的UIViewController  其实很简单,代码如下  MyViewController *checkOut = [[MyViewController alloc] init];  checkOut....
  • UIViewController-KeyboardAdditions 迅捷版 对于Swift兼容版本,请查看 描述 UIViewController+KeyboardAdditions类别通过使用几种简单方法扩展UIViewController类来简化键盘处理逻辑。 支持自动版式和基于frame的...
  • UIViewController 透明

    2015-04-02 10:49:25
    UIViewController * first = [UIViewController new]; UIViewController * second = [UIViewController new]; second.alpha = 0.7; // 注意,该代码需要在 viewdidload 之前执行。 second.modalPresentationS

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,685
精华内容 5,474
关键字:

uiviewcontroller