[英]Making a custom Button using a UIView or overriding UIButton?
我需要通过代码生成一个自定义按钮,这就是我目前正在做的事情。
-(void) initialiseButtons
{
int ypos = playerImage.frame.origin.y + playerImage.frame.size.height + 8;
for(int i=0; i<totalButtons; i++)
{
UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[newButton setFrame:CGRectMake(20, ypos, 220, 30)];
newButton.tag = 10 + i;
[newButton addTarget:self action:@selector(statTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.frontView addSubview:newButton];
ypos += 30 + 7;
}
}
这将通过代码完美地创建空白按钮,为它们提供标记并在touchUpInside上分配回调函数。
自定义按钮需要能够处理按下时显示图像。 它需要能够绘制2个文本。 1对齐于按钮的左侧,1对齐于按钮的右侧。
我的老板建议使用View而不是按钮。 我不明白这是如何工作的。 当我开始考虑它时,我认为它需要一个专用于按钮的viewcontroller。 还有一些绘制方法? 这听起来很复杂,我不知道如何做到这一点。
通过使自定义类重写UIButton,有一个更简单的方法吗? 我之前做了一个简单的测试类,但当我使用它们代替Normal UIButton类时,按钮位置没有绘制任何内容。 我预计我会看到buttonUp.png被绘制。
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface CardButton : UIButton {
}
@end
#import "CardButton.h"
#import <UIKit/UIKit.h>
@implementation CardButton
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
[self setImage:[UIImage imageNamed:@"buttonUp.png"] forStates:UIControlStateNormal];
self.adjustsImageWhenHighlighted = YES;
}
return self;
}
@end
有人能给我一些指示吗? 我现在很沮丧。 一直在阅读一些与按钮相关的其他各种线程,但没有什么能够清楚地说明如何解决这个问题
就个人而言,我会将UIButton子类化。 尽管所有人都不能将UIButton作为子类,但Apple甚至在UIButton文档中讨论了UIButton的子类化。
在子类中,我将创建一个带有两个标签(或图像或其他)的UIView,并将它们作为子视图添加到按钮中(确保将文本和视图的交互设置为FALSE)。
令人敬畏的是它利用UIButton代码并防止您重新发明轮子。
你不应该(我几乎不能说你不能) UIButton
,因为它原来是一个类集群,并且从那里得到它是不切实际的(读:不可能)。
所以你的两个选择是:
1)使用自定义类型的标准UIButton
,添加要显示的元素(即UILabel
)并连接触摸和触摸的动作并做出相应的反应(更改视图,触发操作等)
2)使用自定义UIView
,实现drawRect:
绘制您喜欢的方式或使用自定义视图作为1)中的子视图。 然后使用touchesBegan:
, touchesEnded:
等消息进行相应的反应(如果你能兼容3.2+,则使用UIGestureRecognizer
)。
如果它们都非常相似,您可以构建一个工厂来构建这些按钮,这样您的代码就变得干净且无重复。
根据iOS 6进行编辑: Apple现在提到了UIButton文档中的子类化,所以虽然目前还没有很好地定义,但现在这样做似乎很安全。
一个简单的方法是覆盖UIView。 在视图中,您将UIButton添加为子视图。 这样,您就拥有了可重用的类,而无需重新实现按钮行为。
您可以在UIView派生类的initWithFrame方法中按照自己的方式设置按钮的样式。 如果您将此类用作按钮事件的目标,则可以轻松实现特殊行为,例如显示图像。
对于这两段文本,您可以创建两个标签,并将它们作为子视图添加到按钮中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.