我想创建一组工作和感觉非常像Metro-style tiles that are available on Windows Phones的按钮。我想允许用户点击它们来访问它们的底层功能(打开一个模态或某种东西或那种)。
我担心UIButton的子类化不会让我在那里。我需要瓷砖本身内的方角和动态内容。我发现的帖子似乎提出subclassing a UIButton would not be a good idea有几个原因而且我应该使用UIView。 那个回复来自2010年,我不知道在那之后的2年多来,人们如何实现这种效果会有相当大的变化。如今,如果不是6.0,大多数用户将拥有iOS 5.1+。
假设我确实选择了UIView路线。我应该实施UIResponder的触摸事件还是应该转到UITapGestureRecognizer路线? 2012年更好的做法是什么?
谢谢!
答案 0 :(得分:1)
我建议从UIControl
而不是UIButton
进行子类化。我已经看到这些窗口瓷砖在某些视频中的外观和工作方式,包括在内容更改等时翻转动画,并且将该功能打包到Tile
类或类似的东西比不必携带修改的UIButton更容易无处不在,并为您需要创建的每个此类实例执行此操作。
我建议不从UIButton
进行子类化的原因是因为它提供了对1个图像和1个标签的支持。您似乎在所有磁贴上都有多个图像和标签,因此您必须开始管理自己的子视图。您可以使用UIButton
从头开始创建瓷砖,而不是使用UIControl
中的1个标签和图像。
答案 1 :(得分:0)
如果您只是希望使用方形地铁样式按钮,它们几乎像普通按钮一样(按下它们并发生某些事情),那么您可以使用自定义按钮从标准UIButton类中获取所有功能而无需子类化。
这是一个代码中的快速示例,但这也可以在IB中完成。 假设您有一个名为:tile1.png
的图像//set the image
UIImage *image = [UIImage imageNamed:@"tile1.jpg"];
//create the button
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//add the image
[button setImage:image forState:UIControlStateNormal];
//define the action
[button addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside];
如果您需要通过button.frame修改帧大小 您还可以修改许多其他按钮属性。
您是否知道所有这些并且正在寻找其他的东西或者这有帮助吗? 好吧
答案 2 :(得分:0)
用例是在Storyboard / Interface Builder中使用自定义按钮。拥有子类允许您直接使用Interface Builder中的这个自定义按钮。