zoukankan      html  css  js  c++  java
  • 自定义UIView

    Whenever we want to add an instance of this custom view to the visible screen, we now need to:

    1. load the Nib, and
    2. extract the actual view from the array of loaded objects (because we did not connect it to any outlet on the File’s Owner), and finally
    3. add the newly-instantiated custom view as a subview and set its frame.

    Something like this:

    MyCustomView customView = nil; NSArray* elements = [[NSBundle mainBundle] loadNibNamed: @”MyCustomView” // (1) owner: nil options: nil]; for (id anObject in elements) { // (2) if ([anObject isKindOfClass:[MyCustomView class]]) { customView = anObject; break; } } [self.view addSubview:customView]; // (3) customView.frame = CGRectMake(100.0, 100.0, 400.0, 90.0);

    This is tedious because most of it is generic code that is repeated every time we instantiate a custom view from a Nib. Therefore, my colleague Michael moved all boilerplate code to a UIView category, resulting in the following class method:

    // UIView+NibLoading.m

    • (UIView) loadInstanceFromNib { UIView result = nil; NSArray* elements = [[NSBundle mainBundle] loadNibNamed: NSStringFromClass([self class]) owner: nil options: nil]; for (id anObject in elements) { if ([anObject isKindOfClass:[self class]]) { result = anObject; break; } } return result; }

    With this category, the instantiation code becomes much sleeker:

    MyCustomView* customView = [MyCustomView loadInstanceFromNib]; [self.view addSubview:customView]; customView.frame = CGRectMake(100.0, 100.0, 400.0, 90.0);

  • 相关阅读:
    ubuntu 12.04 配置iscsi共享及挂载iscsi共享
    python_数据类型
    python_基本操作
    shell习题第5题:批量更改文件后缀名
    shell习题第4题:监控ip地址存活
    shell习题第3题:统计内存大小
    shell习题第2题:统计ip访问量
    shell习题第1题:每日一文件
    IIS网站的应用程序与虚拟目录的区别及应用
    http状态码
  • 原文地址:https://www.cnblogs.com/xubojoy/p/3852469.html
Copyright © 2011-2022 走看看