目前,我通过拥有将被分配按钮的"slots"来完成这项工作,这些按钮是从plist中读取的。例如,
switch ([slot1 intValue]) {
case 1:
button1 = [wtb twitterButtonType];
[button1 addGestureRecognizer:twitterButtonTap];
break;
case 2:
button1 = [wtb facebookButtonType];
[button1 addGestureRecognizer:faceBookButtonTap];
break;
case 3:
button1 = [wtb SMSButtonType];
[button1 addGestureRecognizer:smsButtonTap];
break;
case 4:
button1 = [wtb phoneButtonType];
[button1 addGestureRecognizer:instaCallButtonTap];
break;
case 5:
button1 = [wtb cameraButtonType];
[button1 addGestureRecognizer:cameraButtonTap];
break;
case 6:
button1 = [wtb torchButtonType];
[button1 addGestureRecognizer:flashButtonTap];
break;
case 7:
button1 = [wtb pastieButtonType];
[button1 addGestureRecognizer:pastieButtonTap];
break;
case 8:
button1 = [wtb powerButtonType];
[button1 addGestureRecognizer:powerButtonTap];
break;
default:
button1 = nil;
allocSlot1 = NO;
break;
}
现在我几乎100%确信这不是这样做的,正如你可以想象的那样,有了几个插槽,上面的意大利面很快就会失控。所以我的问题是:做我正在尝试的事情的传统方式是什么?
我在500px的iPad应用程序中编写了一个类似的UI——滚动视图中的一系列按钮。我发现这个教程很有帮助;它描述了如何用有限数量的视图创建这种"无限"循环滚动视图。
plist似乎有些过头了,但如果你希望用户编辑它来控制内容,它可能是有意义的。我认为,如果你要拥有动态内容,那可能就是最好的选择。如果总是相同的按钮,则可以添加按钮作为实例变量,甚至是实例变量数组。