41-知识补充(UIPickerView的补充方法,使用self创建对象的好处,id和instancetype区别,KVC底层代码实现,文本框的两个代理方法)

知识补充(UIPickerView的补充方法,使用self创建对象的好处,id和instancetype区别,KVC底层代码实现,文本框的两个代理方法)

1.
PickerView 的几种 选中

1>让PickerView随机选中componet的某一行,只是选中,不会执行方法

[
self . pickerView   selectRow : 1   inComponent : 0   animated : YES ];
        
2>主动选中,会继续执行didSelectRow方法,进行赋值等操作
[
self   pickerView : nil   didSelectRow : 1   inComponent : 0 ];

3>刷新UIPickerView某一列(当前第一列)
[pickerView 
reloadComponent : 1 ];

4>得到UIPickerView指定列下的行的索引(当前第一列)
[pickerView 
selectedRowInComponent : 1 ]

二者一般结合使用,前者选中行,后者显示在lable中(等)

2.在类方法创建当前对象,使用self而使用当前类名(Flag)的好处是

1>
Flag  *flag=[[Flag alloc] init];
2>
Flag  *flag=[[ self  alloc] init];

让代码更有扩展性(比如说使用当前类名Flag创建对象,当前类的子类有自己特有的成员变量,而父类没有,这个时候如果调用父类的类方法创建子类对象,程序就会崩溃)

3.KVC底层代码实现

遍历字典里面所有Key
取出key,去对象里面,找有没有setKey方法
如果没有找到对应的set方法,又会去寻找对象里面有没有Key这个属性名
如果没有找到Key这个属性名,又会去寻找对象里面有没有_Key这个属性


4.一种设计思想

在plist中有只是给了图片名,但是需要展示图片情况下,可再模型类定义UIImage类型变量(变量要用strong修饰),然后重写其set方面将NSString转换为UIImage

@property  ( nonatomic , strong UIImage  * icon;

1>KVC会被字典里的Value传递过来,Value(Icon)类型在Plist文件中是NSString类型,但在成员变量中类型是UIImage

2>重写setIcon的目的就是,把NSString转换为UIImage

-(
void )setIcon:( NSString  *)icon
{
_icon =[ UIImage   imageNamed :icon];
}

5.使用id和instancetype区别

id:有个功能:能调用任何对象在set,get方法
id:不能帮你检测代码是否出错
instancetype:自动识别当前类的对象

建议用instancetype

6. UIDatePicker的创建和基本使用

//1>创建UIDatePicker
UIDatePicker  *datePicter=[[ UIDatePicker   alloc init ];

//2>设置UIDatePicker的模式为UIDatePickerModeDate(年月日)
datePicter.
datePickerMode = UIDatePickerModeDate ;

//3>设置UIDatePicker的地区(zh:中国)
datePicter.
locale =[[ NSLocale   alloc initWithLocaleIdentifier : @"zh" ];

_datePicter =datePicter;

//4>给UIDatePicker注册事件(监听)————此事件当UIDatePicker值发生改变时候触发事件
[datePicter 
addTarget : self   action : @selector (datePicterChange:)  forControlEvents : UIControlEventValueChanged ];

//**注意** 所有继承自UIControl的空间,都可以使用addTarget给其注册事件

//5>自定义文本框键盘 用inputView
birthdayView . inputView =datePicter;

7.文本框的两个代理方法

/**
 *  作用:是否允许文本框输入内容
 *  使用场合:在用户输入文本框内容的时候调用,目的是判断文本框是否允许输入
 */

- (
BOOL ) textField:( UITextField  *)textField shouldChangeCharactersInRange:( NSRange )range replacementString:( NSString  *)string
{
//不允许输入
    
return   NO ;
}
/**
 *  在文本框开始编辑的时候调用,刚调出键盘的时候调用
 *  可以理解成文本框得到光标焦点的时候调用
 */


- (
void )textFieldDidBeginEditing:( UITextField  *)textField
{
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值