实现效果:
1、导航栏内容
1> 自定义HWComposeViewController,继承自UIViewController
2>点击tabBar中的加号按钮弹出发微博控制器(包装成导航控制器)
3>设置导航栏,注意titleView中有两排文字,且文字大小不同,可以使用NSMutableAttributedString来解决!!!
注:需要判断name是否存在,可能网速慢就没有
2、自定义输入框控件
2.1 automaticallyAdjustsScrollViewInsets
注:默认是YES:当scrollView遇到UINavigationBar、UITabBar等控件时,默认会设置scrollView的contentInset,即输入文字自动显示在导航栏下面!!!(top默认64)
2.2 UITextField和UITextView对比
2.3 自定义HWTextView
由于需要添加一个既有占位符,又可以输入多行文字的输入框控件,最好自定义一个HWTextView,继承自UITextField,在drawRect:中添加占位符!
HWComposeViewController中设置输入框控件:
2.4 监听输入框文字改变
注:应该由控件内部完成,什么时候需要显示/隐藏占位文字,使用通知
3、输入框控件完善
3.1 监听属性改变
注:对于一个自定义控件,当使用者改变控件属性的时候,控件的属性需要马上相应改变,对于控件属性,一般重写setter方法
3.2 发送按钮使能
HWComposeViewController通过通知监听输入框文字改变
3.3 发送文字微博
4、键盘工具条
4.1 界面
4.2 实现思路
1>自定义工具条控件HWComposeToolbar,继承自UIView
2> 拖拽TextView隐藏键盘,但是工具条会显示在底部
注1:默认情况下ScrollView能够拖动的前提是内容高度大于本身的高度,可以设置alwaysBounceVertical = YES;
注2:工具条不能添加到键盘上(inputAccessoryView),也不能添加到textView上(否则滚动textView,工具条也会有滚动),要添加到发送微博控制器的view上
注3:监听键盘弹出/隐藏,移动工具条的位置
6、封装工具条和相册
注:弹出发微博控制器后,自动弹出键盘
[self.textView becomeFirstResponder];
5.1 监听工具条按钮点击
注1:按钮的点击需要切换控制器(如点击照相按钮弹出相机、点击相册按钮弹出相册、点击表情按钮切换键盘表情),这些事情最好由控制器(发微博控制器)完成,因此需要使用代理,监听按钮点击
注2:使用枚举绑定工具条每个按钮的tag,用于判断点击了哪个按钮,外面就不需要通过索引或者其他方法来确定到底点击了哪个按钮,即封装工具条
5.2 弹出照相机/相册
使用UIImagePickerController,根据UIImagePickerControllerSourceType判断弹出类型
遵循<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
注:可以用UIImageWriteToSavedPhotosAlbum往相册写图片
5.3 发微博配图相册
1>自定义HWComposePhotosView,添加到textView中(因为拖拽textView希望图片也跟着一起拖动)
2> 选完图片后,传给相册显示
注:通常封装UI控件思路,内部自己布局,自己显示,外部只需要传给控件数据即可
5.4 Modal出相册导致键盘frame改变问题
Modal出相册控制器后,键盘frame改变,选好图片后返回发微博控制器,键盘frame又会改变,会导致工具条在屏幕下面(看不到)
在监听键盘frame改变方法中判断如下:
6、发微博
1> HWComposePhotosView中添加一个readOnly属性,表示图片数组
在initWithFrame:方法中初始化_photos =[NSMutableArray array];
在addPhoto:往数组中添加UIImage
2>区分发文字微博和带图片的微博,带图片的微博属于上传文件数据!
注:新浪提供发接口暂时只能发送一张图片