zoukankan      html  css  js  c++  java
  • OC中NSClassFromString()与NSStringFromClass()的用法及应用场景

    1.NSClassFromString()利用一个字符串创建一个类,我是在标签控制器中 UITabBarController中创建它的子控制器中使用的

     1 - (void)viewDidLoad {
     2     [super viewDidLoad];
     3     self.view.backgroundColor = [UIColor whiteColor];
     4     
     5     [self addChildViewControllerWithClassName:[ZSHomeViewController description] title:@"首页" imageName:@"home"];
     6     [self addChildViewControllerWithClassName:[ZSDiscoveryViewController description] title:@"发现" imageName:@"Found"];
     7     [self addChildViewControllerWithClassName:[ZSCheckViewController description] title:@"审核" imageName:@"audit"];
     8     [self addChildViewControllerWithClassName:[ZSMessageViewController description] title:@"消息" imageName:@"newstab"];
     9     
    10 }
    11 
    12 ///添加子控制器
    13 - (void)addChildViewControllerWithClassName:(NSString *)className title:(NSString *)title imageName:(NSString *)imageName{
    14     //这么创建的好处是当没有这个对象时,程序不会崩溃
    15     UIViewController *vc = [[NSClassFromString(className) alloc]init];
    16     ZSBaseNavigationViewContrllerView *nav = [[ZSBaseNavigationViewContrllerView alloc]initWithRootViewController:vc];
    17     nav.tabBarItem.title = title;
    18     nav.tabBarItem.image = [UIImage imageNamed:imageName];
    19     //渲染方式,UIImageRenderingModeAlwaysOriginal始终绘制图片的原始状态,不使用tintColor
    20     //UIImageRenderingModeAutomatic  // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。
    21     //UIImageRenderingModeAlwaysTemplate   // 始终根据Tint Color绘制图片,忽略图片的颜色信息。
    22     nav.tabBarItem.selectedImage = [[UIImage imageNamed:[imageName stringByAppendingString:@"_press"]]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    23     
    24     [self addChildViewController:nav];
    25 }

    这么做的好处是当你的控制器不存在时,这么创建不会让程序崩溃

    2.NSStringFromClass() 获取与类型名称同名的字符串

    它的应用场景一般是动态的创建类,我是用它创建自定义cell的对象,因为每一种cell都要有不同的ReuseIdentifier,在工程中我们会遇到henduo需要自定义的cell,那么这么做就可以很方便的设置cell的id

    1 + (instancetype)cellWithTableView:(UITableView *)tableView{
    2     if (self == nil) {
    3         return [[self alloc]init];
    4     }
    5     NSString *className = NSStringFromClass([self class]);
    6     NSString *identifier = [className stringByAppendingString:@"CellId"];
    7     [tableView registerClass:[self class] forCellReuseIdentifier:identifier];
    8     return [tableView dequeueReusableCellWithIdentifier:identifier];
    9 }
  • 相关阅读:
    PV、UV、VV,CV的含义
    JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案
    JavaScript Object.defineProperty()方法详解
    jquery on()方法绑定多个选择器,多个事件
    jQuery自定义事件
    jquery插件开发快速入门
    JavaScript日期处理
    js原生函数bind
    使用jquery.pjax实现SPA单页面应用
    PushState+Ajax实现简单的单页面应用SPA
  • 原文地址:https://www.cnblogs.com/losedMemory/p/6336938.html
Copyright © 2011-2022 走看看