我正在使用 drawRect 实现 UIView 子类:如何绘制按钮?

Posted

技术标签:

【中文标题】我正在使用 drawRect 实现 UIView 子类:如何绘制按钮?【英文标题】:I'm implementing a UIView subclass with drawRect: how can I draw a button? 【发布时间】:2011-05-22 21:23:16 【问题描述】:

我有一个 UIView 子类,我正在为整个应用程序中常用的小视图制作。我绘制视图的图像和文本没问题,现在我必须向该视图添加 2 个按钮。这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

任何视图都可以有子视图,即使视图实现了drawRect:。子视图的内容总是覆盖父视图的内容。 UIButton 是一个视图。因此,只需将按钮添加为自定义视图的子视图即可。

【讨论】:

【参考方案2】:

你可以像这样简单地添加它:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[button setTitle:@"Button title" forState:UIControlStateNormal]; //Set the title for regular state
[button addTarget:self 
       action:@selector(yourMethod:)
 forControlEvents:UIControlEventTouchDown];
button.frame = CGRectMake(40, 100, 160, 240); //make the frame
[view addSubview:button]; //add to current view

虽然已经有几个主题讨论了这个主题,请使用搜索栏。 :)

【讨论】:

不是在 ios 上它没有。在 iOS 上,IBActions 可以采用 0、1 或 2 个参数。 (第二个是 UIEvent)【参考方案3】:
//required ...
UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:@"who am i?" forState:UIControlStateNormal];
[button setFrame:CGRectMake(20, 20, 200, 40)];
[button addTarget:self action:@selector(performAction) forControlEvents:UIControlEventTouchUpInside];

//optional properties..
[button setBackgroundColor:[UIColor greenColor]];
[button setImage:[UIImage imageNamed:@"someImg.png"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"green-hdr-bg.png"] forState:UIControlStateNormal];
[button setImageEdgeInsets:UIEdgeInsetsMake(5, 5, 5, 5)];

[yourCustomView addSubview:button];



-(void)performAction

    //do you button click task here

【讨论】:

以上是关于我正在使用 drawRect 实现 UIView 子类:如何绘制按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何在drawRect中获取UIView大小

UIView 边界/框架与 drawRect 不匹配

UIView opaque 属性在实现 drawRect 时被忽略:

透明背景 UIView drawRect 圆圈

XIB 中的 UIView 子类不显示(drawRect:从未调用)

UIView 在后台调用 drawRect