您的位置:首页 > 编程语言

编程技巧 - 适配技巧 - 2

2016-04-20 12:15 363 查看
上篇讲了一些对尺寸的简单适配(缩放适配)

我们这里来讲一些对于需求而言的“适配”

1.案例一:如果版本一需要四行视图,版本二需要二行视图,怎么用最少的代码和逻辑判断去实现?

这里可以用到UIView的tag:

@property(nonatomic) NSInteger tag; // default is 0
- (nullable __kindof UIView *)viewWithTag:(NSInteger)tag; // recursive search. includes self
@property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *subviews;


实现:
#if IS_SECOND_VER == 1
for (int i =1; i < 5; i++) {
[[self.view viewWithTag:300+i] setFrame:[self.view viewWithTag:100+i].frame];
[[self.view viewWithTag:400+i] setFrame:[self.view viewWithTag:200+i].frame];
[[self.view viewWithTag:100+i] setHidden:YES];
[[self.view viewWithTag:200+i] setHidden:YES];
}
#endif

用一个宏定义来控制,另外需要设置这些需要“适配”的视图的tag为规则的101 - 105
经过一个遍历就可以实现了,几乎没有逻辑判断和复杂的代码。

2.案例二:如果有一排的按钮,并且有着不同的title,根据安排显示出来

突然一想,觉得有点蛋疼,这个不是数学的组合排序吗,坑爹,有n种可能,但是细想,如果顺序一致,就非常好办了,只要参考上面的思想即可

首先拿一个数组来获取存在的按钮:

[_existButtonArray removeAllObjects]; // 每次操作前保证数组为空

if (判空1) {

[_existButtonArray addObject:@{@"first" : @"第一个"}];
}

if (判空2)) {

[_existButtonArray addObject:@{@"second" : @"第二个"}];
}

if (判空3)) {

[_existButtonArray addObject:@{@"third" : @"第三个"}];
}

if (判空4)) {

[_existButtonArray addObject:@{@"fourth" : @"第四个"}];
}

if (判空5)) {

[_existButtonArray addObject:@{@"fixth" : @"第五个"}];
}

这里举例是5个,如果是不确定,可以通过一个循环遍历即可
根据数组内数据结构来构建视图布局:

[_existButtonArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){

if (obj && [obj isKindOfClass:[NSDictionary class]]) {

NSString *key = [obj allKeys][0];
UIImage *image = [SDKResourceHelper imageNamedFromResourceWithImageName:key withImageType:@"png"];

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(idx*sameWidth, 0, sameWidth, sameHeight)];
[button setImage:image forState:UIControlStateNormal];
[self adjustImageAndTitleEdgeInsetsToCenter:button
[button setTitle:[obj objectForKey:key] forState:UIControlStateNormal];

SEL btnClickedSel = NSSelectorFromString([NSString stringWithFormat:@"%@BtnClicked:", key]);
[button addTarget:self action:btnClickedSel forControlEvents:UIControlEventTouchUpInside];
[_flowMenu addSubview:button];

}

}];

同样地,其他UIImageView UIView等等都可以通过这样的形式实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS Skills