引言

在开发中,遇到了一个问题“需要创建或删除一个按钮,进行重新排序”,针对该需求的解决办法就是使用 masonry 进行更新或重新设置约束。此时需要把“数组中元素” 与“添加或删除的按钮”相对应,添加或删除按钮后,数组也添加或删除指定元素。在这个地方卡了很久这里就讲述一下该问题的解决思路。

存在问题

  • 样式交替过程中:进行添加或删除按钮,无法让 button 与数组中元素对应。

    如:数组中有元素[ @ “第一条消息”, @ “第二条消息” , @ “第三条消息” , @ “第四条消息”];
    此时,删除,点击按钮三进行删除,按钮无法与数组中 @ “第三条消息”元素关联。

解决思路

思路1.点击删除按钮后,使用“ button.title ” 与 “数组中元素”相关联,但是发现:如果数组中有同名相,会删除所有该名称的按钮,所以该思路不可取。

思路2.给每个 button 添加一个 tag,每次进行:添加或删除 button 后,对所有 button 重新设置 tag,保证每次 tag 都能与数组元素相对应。

最后采取思路2进行设置。

解决办法

第一步:设置创建按钮。

  • 创建按钮,设置标题,添加点击事件,添加按钮。
  • 刷新 buttonsView。

第二步:设置点击删除按钮。

  • 删除按钮时:数组移除 移除指定项:self.buttonsArray removeObjectAtIndex:button.tag – 101。
  • button removeFromSuperview 将此按钮从父控件中移除。
  • 刷新 buttonsView。

第三步:设置刷新 buttonsView 的方法

  • for 循环遍历 buttonsView 的所有 button。
  • 对里面的所有 button 重新设置 button 的 tag 值,给按钮添加一个 tag,tag 值为 self.buttonsArray.count + 100 (+100是防止 butonsView 中子控件的 tag 重名)。
  • 对里面的所有button使用 mas_remakeConstraints 重新设置约束。

样式交替

总结归纳

1.让 buttonsView 与 button 位置动态变化的方式就是使用 masonry 更新或重写约束。

2.让 “button” 与“数组元素” 相关联的方式就是使用 button.tag,并且在每次添加或删除后,重新设置所有
button.tag,让任何时候 button.tag 都与数组中元素参数对应关系。

发表评论

电子邮件地址不会被公开。 必填项已用*标注