//
// HMViewController.m
// 01-UIKit复习
//
// Created by apple on 14-8-18.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import "HMViewController.h"
@interface HMViewController () <UITextFieldDelegate>
@end
@implementation HMViewController
/**
1> UIButton -> UIControl -> UIView
1.1 设置控件的状态
启用、禁用
@property(nonatomic,getter=isEnabled) BOOL enabled;
选中、不选中
@property(nonatomic,getter=isSelected) BOOL selected;
高亮或者不高亮
@property(nonatomic,getter=isHighlighted) BOOL highlighted;
1.2 设置控件内容的布局
垂直居中方向
@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment;
水平居中方向
@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment;
1.3 添加/删除监听方法
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
2> UILabel -> UIView
3> UIImageView -> UIView
4> UITextField -> UIControl
*** 代理设计模式,在OC中,使用最为广泛的一种设计模式
1> 代理的用处是什么?
* 监听那些不能通过addTarget监听的事件!
* 主要用来负责在两个对象之间,发生某些事件时,来传递消息或者数据
2> 代理的实现步骤
(1) 成为(子)控件的代理,父亲(控制器)成为儿子(文本框)的代理
(2) 遵守协议->利用智能提示,快速编写代码
(3) 实现协议方法
*/
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
btn.center = self.view.center;
[self.view addSubview:btn];
// 将监听方法,注册到"运行循环",当按钮被点击后,"运行循环"通知视图控制器执行@selector的方法
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
// UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 40)];
}
- (void)click:(UIButton *)btn
{
NSLog(@"%s", __func__);
[btn removeTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
}
#pragma mark - 文本框代理方法
/**
成为代理之后要做的事情,以及如何工作
1> 协议:预先定义的一些方法名,每个方法对应不同的事件,但是没有具体的实现
*/
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSLog(@"%@ %@", NSStringFromRange(range), string);
// 限制输入的长度
int loc = range.location;
return (loc < 6);
// if (loc < 6) {
// return YES;
// } else {
// return NO;
// }
// 如果返回NO,就不向文本框中添加字符
// return YES;
}
@end