股票场内基金交易,没时间盯盘?
使用优财助手电脑客户端记录下您的股票买入卖出数据,能帮您时刻盯盘,会根据您记录的未售出买入价计算上涨或下跌幅度,及时弹框通知您。想知道如何使用?快点击左方视频观看了解吧~~下载地址:http://youcaizhushou.com
引言
在开发中,遇到了一个问题“需要创建或删除一个按钮,进行重新排序”,针对该需求的解决办法就是使用 masonry 进行更新或重新设置约束。此时需要把“数组中元素” 与“添加或删除的按钮”相对应,添加或删除按钮后,数组也添加或删除指定元素。在这个地方卡了很久这里就讲述一下该问题的解决思路。
存在问题
-
样式交替过程中:进行添加或删除按钮,无法让 button 与数组中元素对应。
如:数组中有元素[ @ “第一条消息”, @ “第二条消息” , @ “第三条消息” , @ “第四条消息”];
此时,删除,点击按钮三进行删除,按钮无法与数组中 @ “第三条消息”元素关联。
解决思路
思路1.点击删除按钮后,使用“ button.title ” 与 “数组中元素”相关联,但是发现:如果数组中有同名相,会删除所有该名称的按钮,所以该思路不可取。
1 2 3 4 5 6 7 8 9 |
//如:数组中元素为[ @ "第一条消息", @ "第二条消息", @ "第二条消息", @ "第三条消息"]; - (void)removeButtonClick:(UIButton *)button { //此时 button.title 为 @"第二条消息" [self.adressArray removeObject:button.title]; [button removeFromSuperview]; //此时 数组元素与按钮不能对应,多删除了一个元素 //数组元素为[@"第一条消息", @"第三条消息"]; } |
思路2.给每个 button 添加一个 tag,每次进行:添加或删除 button 后,对所有 button 重新设置 tag,保证每次 tag 都能与数组元素相对应。
最后采取思路2进行设置。
解决办法
第一步:设置创建按钮。
- 创建按钮,设置标题,添加点击事件,添加按钮。
- 刷新 buttonsView。
1 2 3 4 5 6 7 8 9 10 |
//数组中添加元素 [self.buttonsArray addObject:"第五条消息"]; //创建一个Butoton,通过 tag 与数组元素关联 UIButton *addButton = [[UIButton alloc] init]; [addButton setTitle:"第五条消息" forState:UIControlStateNormal]; [addButton addTarget:self action:@selector(removeButtonClick:) forControlEvents:UIControlEventTouchUpInside]; [self.buttonsView addSubview:addButton]; //刷新 buttonsView [self reloadButtonsView]; |
第二步:设置点击删除按钮。
- 删除按钮时:数组移除 移除指定项:self.buttonsArray removeObjectAtIndex:button.tag – 101。
- button removeFromSuperview 将此按钮从父控件中移除。
- 刷新 buttonsView。
1 2 3 4 5 6 7 8 9 10 |
//设置删除点击事件 - (void)removeButtonClick:(UIButton *)button { //根据 button 的 tag 值,找到数组中指定元素所在位置,移除该元素 [self.buttonsArray removeObjectAtIndex:button.tag - 101]; //将此按钮从父控件中移除 [button removeFromSuperview]; //刷新 buttonsView [self reloadButtonViews]; } |
第三步:设置刷新 buttonsView 的方法
- for 循环遍历 buttonsView 的所有 button。
- 对里面的所有 button 重新设置 button 的 tag 值,给按钮添加一个 tag,tag 值为 self.buttonsArray.count + 100 (+100是防止 butonsView 中子控件的 tag 重名)。
- 对里面的所有button使用 mas_remakeConstraints 重新设置约束。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//设置刷新 buttonsView 方法 - (void)reloadButtonViews { //设置 button 相对 buttonsView 的顶部距离 ,起始值为0 CGFloat addButtonTopMargin = 0; //遍历 buttonsView 中所有 button for (int i = 0; i < self.buttonsView.subviews.count; i++) { //计算第 i 个 button 的高度, addButtonTopMargin = i * (buttonHeight + buttonMargin); ///取出 buttonsView 中第 i 个 button UIButton * button = self.buttonsView.subviews[i]; //将 button 与数组中元素相关联,以便根据每个 button 找到数组中指定元素 (+100是防止 butonsView 中子控件的 tag 重名)。 button.tag = self.buttonsArray.count + 100; //把 buttonsView 中所有 button 使用 mas_remakeConstraints 重新设置高度 [button mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.buttonsView).offset(deleteButtonTopMargin); make.left.mas_equalTo(self.buttonsView); make.height.mas_equalTo(CC_GETHEIGH(13)); }]; }; //最后使用 mas_updateConstraints 更新 buttonsView 的高度 [self.buttonsView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(addButtonTopMargin + CC_GETOFFSET(13 +20)); } }]; } |
总结归纳
1.让 buttonsView 与 button 位置动态变化的方式就是使用 masonry 更新或重写约束。
2.让 “button” 与“数组元素” 相关联的方式就是使用 button.tag,并且在每次添加或删除后,重新设置所有
button.tag,让任何时候 button.tag 都与数组中元素参数对应关系。
想获得去掉 5 元限制的证券账户吗?

证券交易股票基金的佣金,不足 5 元会按照 5 元收取。比如交易 1000 元的股票,按照普遍的证券佣金手续费率万 2.5,其交易佣金为 0.25 元,小于 5 元,实际会收取佣金 5 元,买卖两次需要支付 10 元佣金成本,1% 的利润就这样没了。
如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。
请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。
如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。
请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。