底牌项目中上传牌谱功能之编辑标准模式
2016-09-19 18:14
239 查看
在新增的牌谱功能中首先需要编辑牌谱,而编辑牌谱又分为自定义模式和标准模式,在实现标准模式的过程中就有些费脑子了。首先看效果图:
![](http://img.blog.csdn.net/20160919171706778?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20160919171722400?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
功能需求:用户按照标准模式的进行牌谱的编辑然后进行预览,最终生成牌谱显示在自己的牌谱中(是不是和自定义需求差不多)。在编辑标准模式下如果用户没有编辑某个条目那么在预览中不能显示该条目,如果用户隐藏了某个条目,同样在预览中不能显示。
现在的想法:在编辑页面放五个UITextView这样是比较简单的,虽然代码量可能大些,因为要创建五个UITextView。可相比于我在项目中的做法也不一定,我用了UITableView,而且感觉将问题复杂化了。
下面说说我使用了UITableView的做法。
先说预览页面,思路和自定义编辑牌谱相似,将编辑页面编辑的信息传递过来然后进行页面的布局,在点击完成按钮的时候生成图片,同时进行图片的上传。
至于编辑页面的实现,首先是创建UITableView,tableView上的Cell使用了自定义的Cell,Cell的子视图主要是一个UITextView(用于编辑内容)、UILabel(标题)、UIButton(显示、隐藏按钮).
难点:获取UITextView中的文字 (相对于直接创建五个UITextView获取它们的text较难)
解决难点:
在创建单元格的时候为每一个单元格中的UITextView设置代理,且代理为当前视图,同时设置UITextView的tag值。执行代理方法 代码:
- (void)textViewDidChangeSelection:(UITextView *)textView{
switch (textView.tag) {
case
0:
_text1 = textView.text;
break;
case
1:
_text2 = textView.text;
break;
case
2:
_text3 = textView.text;
break;
case
3:
_text4 = textView.text;
break;
case
4:
_text5 = textView.text;
break;
default:
break;
}
}
在获取到每个UITextView中的内容后将其赋值给五个不同的字符串。下面有几种情况需要我们区别对待。
情况1:五个条目都有编辑内容,进行预览,这是最简单的情况,直接跳到预览页面并将五个条目中的内容即五个字符串传递给预览页面。
情况2:五个条目有的有编辑内容,有的没有编辑内容,这时需要进行处理(我好像又搞复杂了,我是将五个字符串添加到了一个数组中,将数组直接传递给预览页面)。如果没有编辑内容那么某个text字符串就是nil,nil是不能被添加到数组中的,这是需要将为nil的字符串设置为@“”。在预览页面,如果数组中某个元素内容为@“”那么就不显示该内容。
情况3:如果某个有内容的条目被隐藏了则在预览页面不显示此条目。首先需要在创建单元格的方法中将所有的单元格存储到一个数组中,代码:
[self.tableArr
addObject:cell];
(由于单元格比较少,没有进行复用的单元格所以可以使用这种方法获取所有的Cell,还是比较笨的做法
)
在预览方法中取出所有的Cell,如果Cell中的按钮被选中了就将其对应的字符串设置为@“”,代码:
for (StandardCell * cell
in self.tableArr) {
if ([cell.hiddenBtn
isSelected]) {
switch (cell.textV.tag) {
case
0:
_text1 =
@"";
break;
case
1:
_text2 =
@"";
break;
case
2:
_text3 =
@"";
break;
case
3:
_text4 =
@"";
break;
case
4:
_text5 =
@"";
break;
default:
break;
}
}
}
最终的处理都要放到预览事件中进行处理。
感觉写的还是比较冗长,不够言简意赅,继续努力吧
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
。
功能需求:用户按照标准模式的进行牌谱的编辑然后进行预览,最终生成牌谱显示在自己的牌谱中(是不是和自定义需求差不多)。在编辑标准模式下如果用户没有编辑某个条目那么在预览中不能显示该条目,如果用户隐藏了某个条目,同样在预览中不能显示。
现在的想法:在编辑页面放五个UITextView这样是比较简单的,虽然代码量可能大些,因为要创建五个UITextView。可相比于我在项目中的做法也不一定,我用了UITableView,而且感觉将问题复杂化了。
下面说说我使用了UITableView的做法。
先说预览页面,思路和自定义编辑牌谱相似,将编辑页面编辑的信息传递过来然后进行页面的布局,在点击完成按钮的时候生成图片,同时进行图片的上传。
至于编辑页面的实现,首先是创建UITableView,tableView上的Cell使用了自定义的Cell,Cell的子视图主要是一个UITextView(用于编辑内容)、UILabel(标题)、UIButton(显示、隐藏按钮).
难点:获取UITextView中的文字 (相对于直接创建五个UITextView获取它们的text较难)
解决难点:
在创建单元格的时候为每一个单元格中的UITextView设置代理,且代理为当前视图,同时设置UITextView的tag值。执行代理方法 代码:
- (void)textViewDidChangeSelection:(UITextView *)textView{
switch (textView.tag) {
case
0:
_text1 = textView.text;
break;
case
1:
_text2 = textView.text;
break;
case
2:
_text3 = textView.text;
break;
case
3:
_text4 = textView.text;
break;
case
4:
_text5 = textView.text;
break;
default:
break;
}
}
在获取到每个UITextView中的内容后将其赋值给五个不同的字符串。下面有几种情况需要我们区别对待。
情况1:五个条目都有编辑内容,进行预览,这是最简单的情况,直接跳到预览页面并将五个条目中的内容即五个字符串传递给预览页面。
情况2:五个条目有的有编辑内容,有的没有编辑内容,这时需要进行处理(我好像又搞复杂了,我是将五个字符串添加到了一个数组中,将数组直接传递给预览页面)。如果没有编辑内容那么某个text字符串就是nil,nil是不能被添加到数组中的,这是需要将为nil的字符串设置为@“”。在预览页面,如果数组中某个元素内容为@“”那么就不显示该内容。
情况3:如果某个有内容的条目被隐藏了则在预览页面不显示此条目。首先需要在创建单元格的方法中将所有的单元格存储到一个数组中,代码:
[self.tableArr
addObject:cell];
(由于单元格比较少,没有进行复用的单元格所以可以使用这种方法获取所有的Cell,还是比较笨的做法
)
在预览方法中取出所有的Cell,如果Cell中的按钮被选中了就将其对应的字符串设置为@“”,代码:
for (StandardCell * cell
in self.tableArr) {
if ([cell.hiddenBtn
isSelected]) {
switch (cell.textV.tag) {
case
0:
_text1 =
@"";
break;
case
1:
_text2 =
@"";
break;
case
2:
_text3 =
@"";
break;
case
3:
_text4 =
@"";
break;
case
4:
_text5 =
@"";
break;
default:
break;
}
}
}
最终的处理都要放到预览事件中进行处理。
感觉写的还是比较冗长,不够言简意赅,继续努力吧
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
。
相关文章推荐
- 底牌项目中的选择牌谱上传功能--深刻理解UITableView复用
- 底牌项目中的上传牌谱功能之将视图生成图片
- 实现一个Ajax模式的文件上传功能有多难?
- 标准功能模块组件 -- “文档管理组件,网络文档管理,网络存储”,B/S版本组件可独立运行,也可集成到其他项目里,数据结构清晰思路严谨
- 微信公众平台开发[10]-开发模式-高级功能-将图片、视频、音频I内容上传到微信服务器并发送给用户
- 将标准的EclipseWTP项目转化成具有Gradle功能的EclipseWTP项目
- 个人电脑配置FTP服务器,四张图搞定。项目需要,并自己写了个客户端实现下载和上传的功能!
- 实现一个Ajax模式的文件上传功能有多难?
- 【SSH项目实战】国税协同平台-5.头像上传功能
- commons项目中的upload与struts的文件上传功能对比
- winform实现为web项目上传图片的功能
- 一个功能齐全的CMS管理系统模板,内置6套皮肤,已经转化为标准的Eclipse项目,直接导入即可
- web developer tips (29):在web应用项目里启用“编辑并继续”功能
- 标准功能模块组件 -- “文档管理组件,网络文档管理,网络存储”,B/S版本组件可独立运行,也可集成到其他项目里,数据结构清晰思路严谨
- 车型库项目图片批量上传功能
- 项目开发实战 jQuery+php+mysql实现数据上传功能
- 标准功能模块组件 -- “文档管理组件,网络文档管理,网络存储”,B\S版本组件可独立运行,也可集成到其他项目里,数据结构清晰思路严谨
- 在项目中使用 Discuz!NT的上传头像功能
- 移动质监执法通项目用到如何实现拍照上传功能
- windows Powershell 快速编辑模式和标准模式