• iOS基础


    一、UITextField

    1.常见属性

    @property(nonatomic,retain) UIView *leftView; // 设置文本框左边显示什么控件,可以让文本框的内容往右边挪动

    @property(nonatomic)        UITextFieldViewMode leftViewMode; // 设置左边控件的显示模式

    /*

     UITextFieldViewMode的取值

     UITextFieldViewModeNever, 永远不显示

     UITextFieldViewModeWhileEditing, 当文本框正在编辑的时候显示

     UITextFieldViewModeUnlessEditing, 文本框没有编辑的时候显示

     UITextFieldViewModeAlways 永远显示

     */

    // 当文本框发生了一些事情,会通知他的代理

    @property(nonatomic,assign) id<UITextFieldDelegate> delegate;

     

    2.代理方法UITextFieldDelegate协议中声明的方法

    // 当文本框的return key按钮被点击的时候调用(右下角的按钮被点击)

    - (BOOL)textFieldShouldReturn:(UITextField *)textField;

     

    二、用宏定义自动生成代码

    1.比如定义下面的宏

    #define kTest(name) 

    + (id)name##WithDict:(NSDictionary *)dict 

        return [[self alloc] initWithDict:dict]; 

    }

     

    那么kTest(person)就相当于生成下面的代码

    + (id)personWithDict:(NSDictionary *)dict

    {

        return [[self alloc] initWithDict:dict];

    }

     

    2.知识点

    1> 如果要分离相连的标识符,使用连接符##

    2>  代表后面一行的代码也是属于宏的

    3> 不要在最后一行增加 

     

    三、代理设计模式

    1.使用场合:

    1> A对象发生了一些事情,想告诉B对象,就让B对象成为A对象的代理

    2> B对象想监听A对象发生的一些事情,就让B对象成为A对象的代理

     

    2.步骤

    1> 定义一份代理协议(比如QQGroupHeaderDelegate)(等着代理对象去实现)

    协议名都以控件的类名开头,比如QQGroupHeader的代理协议叫做QQGroupHeaderDelegate

    协议里面的方法一般都不强制代理去实现,所以方法前面加上@optional

    协议里面的方法名都以类名开头(但是不加前缀,比如QQGroupHeader的代理方法都是以groupHeader开头)

    协议里面的方法必须能传入控件本身这个参数

     

    2> 定义一个代理属性

    @property (nonatomic, weak) id<QQGroupHeaderDelegate> delegate;

     

    3> 设置代理属性(代理用weak

    header.delegate = controller;

     

    4> 通知代理

    先检测代理有没有实现对应的代理方法

    if ([_delegate respondsToSelector:@selector(groupHeaderClick:)]) {

        [_delegate groupHeaderClick:self];

    }

     

    四、@property的内存管理策略

    weak : UI控件、代理

    strong : weak外的所有OC对象

    assign : 基本数据类型

    copy : NSStringNSMutableString

     

     

     

     

    .QQ聊天布局

     

    1.更改UITextField的发送按钮

    2.设置UITextField的代理

    3.实现UITextField的代理方法

    4.创建一条消息

    5.细节处理

    5.1 修改文本框占位符

    5.2 让文本输入框文字靠右

    5.3 监听Voice按钮

    .设计代理方法的时候,尽量传一些有用的参数。必须传遵守了谁的协议,这是规范。

    .面试解答:为什么要监听UITextField,因为当在UITextField输入文字的时候,系统会自动给UITextField发送代理方法。

    四.QQ好友列表思路

    1.先解析plist文件

    2.创建一个QQGroup模型.

    3.创建一个QQFriend模型.

    注意:写代码规范,新创建的类都要以项目名字为前缀,方法名不要加前缀。

    4.简化操作

    5.plist文件转换成模型。

    6.实现数据源方法

    7.用一个xib文件描述头部视图

    8.自定义头部视图类,内部提供一个设置QQGroup的接口。

    9.为了实现展开功能,还需要设置一个判断是否展开的属性。

    10.监听头部视图按钮的点击。

    1.状态取反

    2.通知代理

    3.旋转图片

    11.给头部视图定义一个协议,并添加一个代理属性。

    12.控制器作为头部视图的代理

    13.用一个字典保存所有的头部视图,循环利用。

    五.为什么要定义协议

    A对象发生一些事情想告诉B对象,就让B对象成为A对象的代理。

    一个对象发生某些事情,通过代理告诉其他对象。任何对象都能作为代理,但是必须遵守协议。

    代理的缺点是:一对一,只能设置一个代理。

    代理的规范:代理协议必须以类名开头,并且要传入一个参数出去,用来告诉代理遵守了谁的协议。

    协议方法不用以类名开头。

    协议方法中如果一些方法,不一定要实现,需要用@optional声明。

    在用代理调用代理方法时,需要判断代理是否实现了协议方法。

  • 相关阅读:
    PPT1 例1
    皇宫看守 树形DP
    没有上司的晚会 树形DP
    将功补过 树形DP
    战略游戏 树形DP
    选课 树形DP
    二叉苹果树 树形DP
    GDOI2016总结
    加分二叉树 树形DP
    [注意]未做的题(最短路)
  • 原文地址:https://www.cnblogs.com/monicaios/p/3505222.html
Copyright © 2020-2023  润新知