首页 理论教育 开发添加事件功能的方法

开发添加事件功能的方法

时间:2023-06-23 理论教育 版权反馈
【摘要】:为时间展示的Cell增加日期的赋值操作,展示事件提醒的时间。LYKXTextInputTableViewCell中,首先声明了一个协议,代码如下:动手写21.2.19 Practise-> LYKXTextInputTableViewCell.swift为事件输入Cell的textField增加placeHolder,即没有输入任何字符时的提示,以及设置delegate属性为LYKXEventEditViewController的实例。其中还有一个本例中未被用到的时间选择的Cell,这里先为其添加值变化之后的回调函数timeValueChange以及附上eventModel的time属性。

开发添加事件功能的方法

回到LYKXEventEditViewController中,因为实际上这个页面主要是编辑一个事件的数据,所以需要重写初始化的方法,代码如下:

动手写21.2.17 Practise-> LYKXEventEditViewController.swift

需要提供一个init()方法,这个方法传入的参数是一个LYKXEventModel的实例,如果外部没有使用这个初始化方法,则在init()中会默认创建一个,这样就需要一个属性去存储这个事件,实例如下:

需要提供一个init()方法,这个方法传入的参数是一个LYKXEventModel的实例,如果外部没有使用这个初始化方法,则在init()中会默认创建一个,这样就需要一个属性去存储这个事件,实例如下:

接着为UITableView的Cell添加上eventModel中的数据,在UITableView的两个协议方法中修改,代码如下:

动手写21.2.18 Practise-> LYKXEventEditViewController.swift

接着为UITableView的Cell添加上eventModel中的数据,在UITableView的两个协议方法中修改,代码如下:

动手写21.2.18 Practise-> LYKXEventEditViewController.swift

为事件输入Cell的textField增加placeHolder,即没有输入任何字符时的提示,以及设置delegate属性为LYKXEventEditViewController的实例。为时间展示的Cell增加日期的赋值操作,展示事件提醒的时间。为事件备注输入的textView也设置placeHolder。其中还有一个本例中未被用到的时间选择的Cell,这里先为其添加值变化之后的回调函数timeValueChange以及附上eventModel的time属性。最后为备注输入的UITextView设置了placeHolder。下面将对这些内容进行剖析。

LYKXTextInputTableViewCell中,首先声明了一个协议,代码如下:

动手写21.2.19 Practise-> LYKXTextInputTableViewCell.swift

为事件输入Cell的textField增加placeHolder,即没有输入任何字符时的提示,以及设置delegate属性为LYKXEventEditViewController的实例。为时间展示的Cell增加日期的赋值操作,展示事件提醒的时间。为事件备注输入的textView也设置placeHolder。其中还有一个本例中未被用到的时间选择的Cell,这里先为其添加值变化之后的回调函数timeValueChange以及附上eventModel的time属性。最后为备注输入的UITextView设置了placeHolder。下面将对这些内容进行剖析。

LYKXTextInputTableViewCell中,首先声明了一个协议,代码如下:

动手写21.2.19 Practise-> LYKXTextInputTableViewCell.swift

这个协议实现了NSObjectProtocol并且声明了新的实现方法,调用时会传入一个Cell和一个textField参数,在之后的实现中会将Cell本身和自身的textField传入。接着在Cell的awakeFromNib的方法中通过NotificationCenter去监听textField的文字变化的通知。

这个协议实现了NSObjectProtocol并且声明了新的实现方法,调用时会传入一个Cell和一个textField参数,在之后的实现中会将Cell本身和自身的textField传入。接着在Cell的awakeFromNib的方法中通过NotificationCenter去监听textField的文字变化的通知。

然后在通知回调的textFieldDidChangeText()方法中调用delegate实现的协议方法,这样就可以获取到textField已经变化的情况。

在LYKXTextViewTableViewCell中,增加一个UITextView的placeHolder属性用于展示无字符输入时的展示情况,并且在设置时,增加对当前textView文字变化的监听。如果已经有文字输入则不展示placeHolder,因为在扩展中不允许添加新的存储属性,所以添加一个只读属性PlaceHolderTag用于返回一个视图的tag值,另一个只读属性placeHolder用于返回一个UILabel的实例作为placeHolder。对于每个UIView以及UIView子类的实例,读者都可以为其设置tag属性的值,再通过视图的父视图调用viewWithTag方法便能获取到指定的视图,代码如下:

动手写21.2.20 Practise-> LYKXTextViewTableViewCell.swift

然后在通知回调的textFieldDidChangeText()方法中调用delegate实现的协议方法,这样就可以获取到textField已经变化的情况。

在LYKXTextViewTableViewCell中,增加一个UITextView的placeHolder属性用于展示无字符输入时的展示情况,并且在设置时,增加对当前textView文字变化的监听。如果已经有文字输入则不展示placeHolder,因为在扩展中不允许添加新的存储属性,所以添加一个只读属性PlaceHolderTag用于返回一个视图的tag值,另一个只读属性placeHolder用于返回一个UILabel的实例作为placeHolder。对于每个UIView以及UIView子类的实例,读者都可以为其设置tag属性的值,再通过视图的父视图调用viewWithTag方法便能获取到指定的视图,代码如下:

动手写21.2.20 Practise-> LYKXTextViewTableViewCell.swift

为了美观,在awakeFromNib中将textView的textContainer属性的lineFragmentPadding设置为0,此时输入框的文字紧贴输入框的左侧,代码如下:

动手写21.2.21 Practise-> LYKXTextViewTableViewCell.swift

为了美观,在awakeFromNib中将textView的textContainer属性的lineFragmentPadding设置为0,此时输入框的文字紧贴输入框的左侧,代码如下:

动手写21.2.21 Practise-> LYKXTextViewTableViewCell.swift

两个Cell的自定义功能实现之后,需要实现点击Cell的方法。在本例中,点击时间展示Cell会展开时间选择Cell。切换到LYKXEventEditViewController类中,实现UITableViewDelegate的选择Cell的方法如下:

动手写21.2.22 Practise-> LYKXEventEditViewController.swift

两个Cell的自定义功能实现之后,需要实现点击Cell的方法。在本例中,点击时间展示Cell会展开时间选择Cell。切换到LYKXEventEditViewController类中,实现UITableViewDelegate的选择Cell的方法如下:

动手写21.2.22 Practise-> LYKXEventEditViewController.swift(www.xing528.com)

当点击时,如果没有展示时间选择Cell则通过insert的方式展示,如果已经展示则使用remove的方式移除。在时间发生变化时,会调用timeValueChange()方法,实现如下:

当点击时,如果没有展示时间选择Cell则通过insert的方式展示,如果已经展示则使用remove的方式移除。在时间发生变化时,会调用timeValueChange()方法,实现如下:

这里重载了时间展示的Cell,这样更新的时间就会被展示在Cell上。此外还要为LYKXEventEdit ViewController实现LYKXTextInputTableViewCellDelegate的协议,首先类声明增加满足的协议,代码如下:

动手写21.2.23 Practise-> LYKXEventEditViewController.swift

这里重载了时间展示的Cell,这样更新的时间就会被展示在Cell上。此外还要为LYKXEventEdit ViewController实现LYKXTextInputTableViewCellDelegate的协议,首先类声明增加满足的协议,代码如下:

动手写21.2.23 Practise-> LYKXEventEditViewController.swift

接着实现协议中声明的函数如下:

接着实现协议中声明的函数如下:

通过Cell找到对应修改的内容,如果是事件名称,则将textField中的text赋值上去。通过textView的text修改备注信息。本例使用updateDoneButtonStatus()方法,实现如下:

动手写21.2.24 Practise-> LYKXEventEditViewController.swift

通过Cell找到对应修改的内容,如果是事件名称,则将textField中的text赋值上去。通过textView的text修改备注信息。本例使用updateDoneButtonStatus()方法,实现如下:

动手写21.2.24 Practise-> LYKXEventEditViewController.swift

self.navigationItem.rightBarButtonItem是“添加”或者“修改”按钮,在viewDidLoad时添加到导航栏上,代码如下:

动手写21.2.25 Practise-> LYKXEventEditViewController.swift

self.navigationItem.rightBarButtonItem是“添加”或者“修改”按钮,在viewDidLoad时添加到导航栏上,代码如下:

动手写21.2.25 Practise-> LYKXEventEditViewController.swift

这里需要实现两个方法,点击导航栏左侧按钮或者右侧按钮,代码如下:

动手写21.2.26 Practise-> LYKXEventEditViewController.swift

这里需要实现两个方法,点击导航栏左侧按钮或者右侧按钮,代码如下:

动手写21.2.26 Practise-> LYKXEventEditViewController.swift

点击左侧取消按钮时,判断自己的视图是被present还是被push进来的,然后直接退出;点击右侧添加或者修改按钮时,通过delegate方式去保存eventModel,然后也退出。在LYKXEventEdit ViewController类中声明协议如下:

动手写21.2.27 Practise-> LYKXEventEditViewController.swift

点击左侧取消按钮时,判断自己的视图是被present还是被push进来的,然后直接退出;点击右侧添加或者修改按钮时,通过delegate方式去保存eventModel,然后也退出。在LYKXEventEdit ViewController类中声明协议如下:

动手写21.2.27 Practise-> LYKXEventEditViewController.swift

并且添加delegate属性:

并且添加delegate属性:

至此,整个LYKXEventEditViewController的开发就完成了。

至此,整个LYKXEventEditViewController的开发就完成了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈