zoukankan      html  css  js  c++  java
  • CoCoa编程中视图控制器与视图类(一)

    iPhone编程规则是:一个窗口,多个视图。UIView是iPhone屏幕上很多控件的基础类。每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView及其专门化子类构建的。

    显示数据的视图:

    • UITextView
    • UILabel
    • UIImageView
    • UIWebView
    • MKMapViews
    • UIScrollView

    可选择的视图(以下两个视图类实例都是模态显示的)

    • UIAlertView
    • UIActionSheet 

    所有控件(控件是将用户触摸转换为回调触发器的屏幕对象。)

    • UIButton
    • UISegmentedControl
    • UISwitch
    • UISlider
    • UIPageControl
    • UITextField

    表格和拾取器:

    • UITableView (对于表格的行有一个UITableViewCell类的表格单元项)
    • UIPickerView

    各种栏样式:

    • UINavigationBar (对于导航栏有一个UINavigationItem类的导航项)
    • UITabBar
    • UISearchBar
    • UIToolBar

    在所有iPhone栏样式视图中,只有UIToolBar类可以直接使用。其它三个都是通过对应的控制器类来完成工作,而不是直接构建和管理视图。 

    进度与活动:

    • UIActivityIndicatorView
    • UIProgressView 

    控制器类
    UIViewController类
          UIViewController负责创建其管理的视图及在低内存的时候将它们从内存中移除。还为标准的系统行为进行响应。从语法上说,UIViewController是视图控制器的父类。视图控制器类是没有可视化表示的抽象类,只有它管理的视图才提供可视画布。记住:1. 视窗UIWindow虽然也是UIView,但不能用处理普通UIView的方式来设置; 2. UIView视图使用initWithFrame:初始化,而其UIViewController则使用init类方法直接初始化。3. UIViewController实例负责设置视图的外观和它显示的子视图。

    UINavigationController类
    1.导航控制器使用内置动画在视图之间切换; 2. 导航控制器自动构建并处理Back按钮; 3. 导航控制器提供简单的菜单栏可帮助用户进行自定义控件。4. 每一个导航控制器都拥有一个根视图控制器RootViewController,它是“导航弹出栈”的基础,是根。5. 通过调用initWithRootViewController:方法可以将特定控制器设置为根。如常见的:

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[MyViewController alloc] init]];
    [window addSubview:nav.view];


    UINavigationController如何推入和弹出视图控制器?

    • 使用pushViewController: animated:可推入一个新的控制器,从而增加新的项到导航栈。(记住:导航栏控制器不添加一个视图进去,这个导航栏是没有意义的!)
      //创建一个导航控制器
      UINavigationController *aNav = [[UINavigationController alloc] init];

      //创建一个要被推入的视图控制器,然后添加此视图控制器到导航栏并予以显示
      UIViewController *aView = [[UIViewController alloc] initWithNibName:(*xib文件名*)];
      [aNav pushViewController:aView animated:NO]; //这里假定是导航栏的第一个视图,所以不要动画化。
      推入时,新的视图控制器从右方滑入屏幕(假定animated:YES)。向左指的Back后退按钮出现,可返回到上一步,且Back按钮用的是上一个视图控制器的标题。
    • 作为弹出回上一级视图控制器的Back按钮是自动产生并处理的,无需用户干预。
    • 可使用popViewControllerAnimated:BOOL弹出当前视图控制器并向左显示前一个视图。
    • 可使用popToViewController: animated:弹出到指定的视图控制器,即不一定是上一个。
    • 可使用popToRootViewControllerAnimated:BOOL直接弹出到根视图控制器。
    • 设置导航栏的按钮并不是去设置导航栏本身。一切都是在被推入的UIViewController子类内部执行推入请求和相关导航栏的定制(如:右键按钮)。

    导航栏可以通过直接访问navigationBar属性,改变栏的风格或者它的颜色:
          self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
    提示:UIViewController有一个属性是navigationController,如果当前ViewController在某个NavigationController的堆栈中的话(即是被推送过来的),则视图控制器的这个属性就指向那个NavigationController,否则为nil。

    要添加或修改导航栏按钮,使用UINavigationItem抽象类。其描述了导航栏上显示的内容,而正好UIViewController另有一导航项属性navigationItem包括左栏按钮(leftBarButtonItem)、右栏按钮(rightBarButtonItem)和栏标题(title)、用于显示标题的视图(titleView),以及用于从当前视图向后导航的Back按钮(backBarButtonItem)和隐藏后退按钮(hidesBackButton)。

    注意:对于导航栏定制,对定制实际标题的最简单方式时使用子视图控制器而不是导航项的title属性:
           self.title = @"Hello";
           self.title = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; //可使标题自动反映运行的应用程序名称
     
    导航控制器加载模态视图控制器:
     通常情况下,模态视图控制器用于选取数据。在发送presentModalViewController: animated:消息后,一个新的视图控制器(其实是个ModalViewController)会滑动到屏幕并掌握控制权,直到使用dismissModalViewControllerAnimated:将它隐藏才重新得到控制权。

    对于导航控制器来说,viewWillAppear方法是没有结果的,要实现UINavigationControllerDelegate委托方法willShowViewController: animated:达到目的

  • 相关阅读:
    Azkaban的使用
    Azkaban安装
    Kafka 启动失败,报错Corrupt index found以及org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'version': java.nio.BufferUnderflowException
    Kafka 消费者设置分区策略及原理
    Kafka利用Java API自定义生产者,消费者,拦截器,分区器等组件
    zookeeper群起总是有那么几个节点起不来的问题解决
    flume 启动agent报No appenders could be found for logger的解决
    Flume 的监控方式
    Flume 自定义 组件
    Source r1 has been removed due to an error during configuration java.lang.IllegalArgumentException: Required parameter bind must exist and may not be null & 端口无法连接
  • 原文地址:https://www.cnblogs.com/lovecode/p/2306648.html
Copyright © 2011-2022 走看看