版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337919
在新增的牌谱功能中首先需要编辑牌谱,而编辑牌谱又分为自定义模式和标准模式,在实现标准模式的过程中就有些费脑子了。首先看效果图:
功能需求:用户按照标准模式的进行牌谱的编辑然后进行预览,最终生成牌谱显示在自己的牌谱中(是不是和自定义需求差不多)。在编辑标准模式下如果用户没有编辑某个条目那么在预览中不能显示该条目,如果用户隐藏了某个条目,同样在预览中不能显示。
现在的想法:在编辑页面放五个UITextView这样是比较简单的,虽然代码量可能大些,因为要创建五个UITextView。可相比于我在项目中的做法也不一定,我用了UITableView,而且感觉将问题复杂化了。
下面说说我使用了UITableView的做法。
先说预览页面,思路和自定义编辑牌谱相似,将编辑页面编辑的信息传递过来然后进行页面的布局,在点击完成按钮的时候生成图片,同时进行图片的上传。
至于编辑页面的实现,首先是创建UITableView,tableView上的Cell使用了自定义的Cell,Cell的子视图主要是一个UITextView(用于编辑内容)、UILabel(标题)、UIButton(显示、隐藏按钮).
难点:获取UITextView中的文字 (相对于直接创建五个UITextView获取它们的text较难)
解决难点:
在创建单元格的时候为每一个单元格中的UITextView设置代理,且代理为当前视图,同时设置UITextView的tag值。执行代理方法 代码:
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;
}
}
}
最终的处理都要放到预览事件中进行处理。
感觉写的还是比较冗长,不够言简意赅,继续努力吧。