UILTView经典知识点练习

作者:韩俊强   未经允许,请勿转载!

关注博主:http://weibo.com/hanjunqiang

声明:UILTView 指:UILabel 和 UITextField 的复合

#import "AppDelegate.h"

@interface AppDelegate ()<</span>UITextFieldDelegate>

@end

@implementation AppDelegate
- (void)dealloc{
    self.window = nil;
    [super dealloc];

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]autorelease];

//主视图

    UIView *contenView = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];

    contenView.tag = 300;

    contenView.backgroundColor = [UIColor brownColor];

    [self.window addSubview:contenView];
    [contenView release];
   
    //数据源:是用来提供数据
    //label上的数据
    NSArray *texts = @[@"用户名",@"密码",@"确认密码",@"手机号",@"邮箱"];
//textField上的数据

    NSArray *placegolds = @[@"请输入用户名",@"请输入密码",@"请再次确认密码",@"请输入手机号",@"请输入邮箱"];

———————————————————————————————————————

    for循环布局:

    for (int i = 0; i <</span> 5; i ++) {
        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(20, 40 + 50 *i, 60, 30)];
        label.backgroundColor = [UIColor greenColor];
        label.text = texts[i];
        label.layer.cornerRadius = 10;//切圆角
        label.layer.masksToBounds = YES;
        label.tag = 100 + i;

        label.font = [UIFont boldSystemFontOfSize:15];

        label.textAlignment = NSTextAlignmentCenter;//居中对齐

        [contenView addSubview:label];
        [label release];

       

         UITextField *field = [[UITextField alloc]initWithFrame:CGRectMake(100, 40 + 50 * i, 200,30)];

     

        field.placeholder = placegolds[i];//输入提示内容

        field.borderStyle = UITextBorderStyleRoundedRect;
        field.backgroundColor = [UIColor cyanColor];
       
          field.tag = 200 + i;
        //添加代理
        field.delegate =self;
        [contenView addSubview:field];
        [field release];
     

        if (1 == i || 2 == i) {

            field.secureTextEntry = YES;//加密框显示

        }

        if (3 == i ) {

            field.keyboardType = UIKeyboardTypeNumberPad;//显示数字键盘

        }      

    }

——————————————————————————————————

    //登录
    UIButton *loginBotton = [UIButton buttonWithType:UIButtonTypeSystem];
    loginBotton.frame = CGRectMake(40, 300, 100, 30);
    loginBotton.backgroundColor = [UIColor yellowColor];
    [loginBotton setTitle:@"登录" forState:UIControlStateNormal];
   
    [contenView addSubview:loginBotton];
    //注册
    UIButton *signBotton = [UIButton buttonWithType:UIButtonTypeSystem];
    signBotton.frame = CGRectMake(180, 300, 100, 30);
    signBotton.backgroundColor = [UIColor yellowColor];
    [signBotton setTitle:@"注册" forState:UIControlStateNormal];
   
    [contenView addSubview:signBotton];

    

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}
=================================================
//点击空白回收键盘
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    //获取父视图
    UIView *contenView = [self.window viewWithTag:300];
    for (int i = 0; i <</span> 5; i ++ ) {
        UITextField *field = (UITextField *)[contenView viewWithTag:200 + i];
        [field resignFirstResponder];
    }

}

//textField 点return回收键盘

- (BOOL)textFieldShouldReturn:(UITextField *)textField;{
    [textField resignFirstResponder];
    return YES;
}

例子:对上例题优化

建立LTView子类,继承自UIView

LTView.h

#import

@interface LTView : UIView
@property (nonatomic,retain)UILabel *label;
@property (nonatomic,retain)UITextField *field;

@end

LTView.m

@implementation LTView
//释放LT
- (void)dealloc{
    self.label = nil;
    self.field = nil;
    [super dealloc];

}

//重写父类的初始化方法
- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {

        [self p_setup];  //调用封装

    }
    return self;

}

//封装成一个方法建议用_label,因为用seif.容易和后面的CGRectMake(self.)混淆

- (void)p_setup{
    _label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width / 2,self.frame.size.height)];
//    _label.backgroundColor = [UIColor blueColor];
    [self addSubview:_label];
    [_label release];
    _field = [[UITextField alloc]initWithFrame:CGRectMake(self.frame.size.width / 2, 0,self.frame.size.width / 2, self.frame.size.height)];
//    _field.backgroundColor = [UIColor cyanColor];
    [self addSubview:_field];
    [_field release];

}

UIView *contenView = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];

    contenView.tag = 300;

    contenView.backgroundColor = [UIColor whiteColor];

    [self.window addSubview:contenView];
    [contenView release];

  //=============================================

AppDelegate.m

记得引入子类头文件 #import "LTView.h"

    //数据源:是用来提供数据
    //label上的数据
    NSArray *texts = @[@"用户名",@"密码",@"确认密码",@"手机号",@"邮箱"];
//textField上的数据

    NSArray *placegolds = @[@"请输入用户名",@"请输入密码",@"请再次确认密码",@"请输入手机号",@"请输入邮箱"];

// {(20,40 + 50*i),(280,30)}

    //我们管我们自己定义的控件叫做自定义复合视图,因为系统没有为我们提供需要的控件;
    for (int i = 0; i <</span> 5; i ++) {
        LTView *view = [[LTView alloc]initWithFrame:CGRectMake(20, 40 + 50 * i, 280, 30)];
        //给label赋值
        view.label.text =texts[i];
        //给field赋值
        view.field.placeholder = placegolds[i];
        //设置代理
        view.field.delegate = self;
        //给view设置tag值

        view.tag = 200 + i;

     

        view.backgroundColor = [UIColor whiteColor];
        [contenView addSubview:view];
        [view release];

    }    //登录
    UIButton *loginBotton = [UIButton buttonWithType:UIButtonTypeSystem];
    loginBotton.frame = CGRectMake(40, 300, 100, 30);
    loginBotton.backgroundColor = [UIColor yellowColor];

    [loginBotton setTitle:@"登录" forState:UIControlStateNormal];

    [contenView addSubview:loginBotton];
    //注册
    UIButton *signBotton = [UIButton buttonWithType:UIButtonTypeSystem];
    signBotton.frame = CGRectMake(180, 300, 100, 30);
    signBotton.backgroundColor = [UIColor yellowColor];

    [signBotton setTitle:@"注册" forState:UIControlStateNormal];

    [contenView addSubview:signBotton];

 ————————————————————————————

//重写点击空白回收键盘
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    //    //获取父视图
        UIView *contenView = [self.window viewWithTag:300];
    for (int i = 0; i <</span> 5; i ++) {
        //此时contentView 上的控件是我们自定义出来的LTView,所以根据Tag取出控件应该转换为LTView类型
        LTView *view = (LTView *)[contenView viewWithTag:200 + i];
        [view.field resignFirstResponder];

    }

}

—————————————————————————————

//点击return收回键盘

- (BOOL)textFieldShouldReturn:(UITextField *)textField;{
    [textField resignFirstResponder];
    return YES;

}

回到本节知识汇总:http://blog.sina.com.cn/s/blog_814ecfa90102vvb0.html

欢迎学习本文档,未经博主允许,不得私自转载!

时间: 2024-10-03 16:12:18

UILTView经典知识点练习的相关文章

CSS入门经典-知识点摘录

Width属性的"收缩"和"扩展"适应 所有带width属性的元素都有一个默认的auto值,但在使用auto宽度时并不是所有元素都具有相同的效果.例如,<table>元素只是水平扩展以容纳其中的数据,这种方法称为"收缩适应".另一方面,<div>元素则尽可能水平扩展其宽度,这种方法称为"扩展适应". 计算选择器的针对性 作为对样式表优先级的一个补充,每个样式表中的选择器也存在优先级顺序.这种优先级由选择

iOS学习目录

IOS开发学习索引目录:http://blog.sina.com.cn/s/blog_814ecfa90102vwlu.html ---------------每走一步------------------------- ---------------就是进步------------------------- ================整理UI总结:==================== 控件的基本使用 : http://blog.sina.com.cn/s/blog_814ecfa901

我的Android进阶之旅------&amp;gt;经典的大牛博客推荐(排名不分先后)!!

今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超博客 Android中文Wiki AndroidStudio-NDK开发-移动开发团队 谦虚的天下 - 博客园 gundumw100博客 - android进阶分类文章列表 - ITeye技术网站 CSDN博文精选:Android系列开发博客资源汇总 - CSDN.NET - CSDN资讯 Android笔记本--半年来的研究笔记,导航. - 思想实践地 - CSDN博客 [魏祝林]Android中级教程 - Androi

js运动动画的八个知识点

 本文给大家分享的是个人在学习js运动动画的过程中总结的我们需要注意的8个知识点,分别是速度动画.透明度渐变.缓冲运动.多物体运动.获取样式.任意属性值.链式运动和同时运动,非常的详细,推荐给小伙伴们.     今天简单的学了一下js运动动画,记录一下自己的心得体会,分享给大家. 下面是我整理出来的结果. 知识点一:速度动画. 1.首先第一步实现速度运动动画,封装一个函数,用到的知识是setInterval(function(){   代码如下: oDiv.style.left=oDiv.off

js+jquery常用知识点汇总

 本文主要介绍了jquery源码中常见的知识点以及javascript中原型链常见的知识点,非常的全面,这里推荐给小伙伴们.     一.jquery源码中常见的知识点 1.string,number类型转换的快捷方法   复制代码 代码如下: // @param s为字符串,n为数字 function fn(obj){ //转换为String类型 var s = obj +""; //转换为number类型 var n = +obj; }   分享一个面试例子: //加会将其后面自动

我的Java开发学习之旅------&amp;gt;Java经典面试题

摘自张孝祥itcast 从享受生活的角度上来说:"程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做:第二,你非常痴迷和爱好程序,并且在这方面有一些天赋和优势.程序员的结局也是有两种:第一,默默退休,第二以程序员为起点或跳板,注意积累,跟对了好的老板或团队,找到和很好的搭档自己创业,成为IT金领和富翁." 人们在时间面前是平等的,吾生也有涯,所以,你的经验更丰富点,那不算什么,经验是用时间积累的

大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 关联规则分析算法)

原文:(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 关联规则分析算法) 前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:Microsoft决策树分析算法.Microsoft聚类分析算法.Microsoft Naive Bayes 算法.Microsoft 时序算法,后续还补充了二篇结果预测篇.Microsoft 时序算法--结果预算+下期彩票预测篇,看样子有必要整理一篇目录了,不同的算法应用的场景也是不同的,每篇文章都有它自己的应用场景介绍,有兴趣

植物大战僵尸经典开发步骤

植物大战僵尸一直是一个很受欢迎的经典的小游戏,我主要用cocos2d-android做了一个类似的小demo,在这里主要介绍一下我做给这个小demo. 开发前各种准备工作 做一个小游戏我们首先要有一个地图吧,所以我用tiled这个软件来制作地图,安装和使用都挺简单了,画好后用notepad++打开看一下图片路径对不对,然后把图片.字体文件.地图文件.ttf放到工程的assets目录下,然后我们就可以在后面使用这些资源了. 当然我,我们先来了解一下一些其他相关知识点 加载地图 CCTMXTiled

javascript中的一些核心知识点以及需要注意的地方

原文:javascript中的一些核心知识点以及需要注意的地方 前言 近期杂事甚多,这些事情的积累对知识体系的提升有好处,但是却不能整理出来,也整理不出来 比如说我最近研究的Hybrid在线联调方案便过于依赖于业务,就算分享也不会有人读懂,若是抽一点来分享又意义不大 又拿最近做webapp view 转场动画研究,就是几个demo不断测试,感觉没有什么可说的 最后甚至对webapp中的History的处理方案也是有一些心得,一点方案,但是依旧难以整理成文,于是便开始文荒了 这个时候不妨便温故知新