我正在尝试创建一个从 api 中提取 json 的应用程序,其中包含一组关于界面外观的说明。所以基本上 json 将包含一个 NSDictionary 数组,每个 NSDictionary 将是一个显示在屏幕上的对象。
在 NSDictionary 中将包含对象如何显示的所有详细信息,例如对象的类型、对象的位置和对象的大小。
我编写了代码来接受屏幕上的一系列按钮。
for (int i = 0; i < self.jsonObjects.count; i++) {
NSDictionary *jsonObject = [self.jsonObjects objectAtIndex:i];
if ([[jsonObject objectForKey:@"object"] isEqualToString:@"UIButton"]) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSNumber *x = [jsonObject objectForKey:@"xlocation"];
NSNumber *y = [jsonObject objectForKey:@"ylocation"];
NSNumber *width = [jsonObject objectForKey:@"width"];
NSNumber *height = [jsonObject objectForKey:@"height"];
NSString *title = [jsonObject objectForKey:@"title"];
[button setFrame:CGRectMake(x.intValue, y.intValue, width.intValue, height.intValue)];
[button setTitle:title forState:UIControlStateNormal];
[self.view addSubview:button];
}
}
现在我可以为每个对象拥有大量的 if 语句,并让程序做同样的事情,但我试图避免它。
基本上我要问的是实现这一点以最小化编码和提高代码可读性的最佳方法是什么。
这是我为模拟按钮的 json 输出而编写的代码。
NSDictionary *button = [[NSDictionary alloc] initWithObjectsAndKeys:@"UIButton", @"object",@"PressMe",@"title",@"10",@"xlocation",@"10",@"ylocation",@"100",@"width",@"100",@"height", nil];
NSDictionary *button2 = [[NSDictionary alloc] initWithObjectsAndKeys:@"UIButton", @"object",@"Dont Press",@"title",@"10",@"xlocation",@"210",@"ylocation",@"100",@"width",@"100",@"height", nil];
self.jsonObjects = [[NSArray alloc] initWithObjects:button,button2, nil];
由于我仍然必须创建 api,因此 json 输出可以非常灵活。
我正在考虑拥有一系列数组。其中数组中的每个数组都是按钮数组或文本字段数组。那么我只需要大约 20-30 个数组来覆盖不同的对象类型,并且可以遍历主数组,然后遍历每个按钮或文本字段的数组。
为伊莱·加内姆
object UIView * 0x07145c60
UIResponder UIResponder
_layer CALayer * 0x07145e80
_tapInfo id 0x00000000
_gestureInfo id 0x00000000
_gestureRecognizers NSMutableArray * 0x00000000
_subviewCache NSArray * 0x075213e0
_charge float 0
_tag NSInteger 0
_viewDelegate UIViewController * 0x00000000
_backgroundColorSystemColorName NSString * 0x00000000
_viewFlags <anonymous struct>