开发过程中经常遇到通过imageEdgeInsets和titleEdgeInsets去设置button中的image,title的位置,来达到想要的效果。但因为对其原理的不了解,经常碰壁,设置了却达不到自己想要的效果。终于找到这篇文章,文章作者解析的很详细,这里记录一下,方便自己日后查阅。
成都创新互联专注于网站建设|成都网站维护公司|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖石牌坊等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身策划品质网站。
1.常用的button样式,图片在上,文字在下
按钮代码
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setTitle:@"求最佳哦~" forState:UIControlStateNormal];
[myButton setTitle:@"可以松手~" forState:UIControlStateHighlighted];
[myButton addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
myButton.backgroundColor = [UIColor yellowColor];
myButton.bounds = CGRectMake(0, 0, 200, 100);
myButton.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
[self.view addSubview:myButton];
按钮响事件函数
-(void)myButton:(UIButton *)sender{
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"按钮点击提示" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
[myAlertView show];
}
不懂的追问
所以正常的做法应该是在initWithFrame:方法中创建子控件,注意此时子控件有可能只是一个局部变量,所以想要在layoutSubviews访问到的话,一般需要创建这个子控件的对应属性来指向它。
@property (nonatomic, weak) UIButton *button; // 注意这里使用weak就可以,因为button已经被加入到self.view.subviews这个数组里。
...
- (instancetype)initWithFrame: (CGRect)frame
{
if (self = [super initWithFrame: frame]) {
UIButton *button = ... // 创建一个button
[button setTitle: ...] // 设置button的属性
[self.view addSubview: button]; // 将button加到view中,并不设置尺寸
self.button = button; //将self.button指向这个button保证在layoutSubviews中可以访问
UILabel *label = ... // 其他的子控件同理
}
}
这样我们就可以在layoutSubviews中访问子控件,设置子控件的尺寸,因为此时view的frame已经确定。
- (void)layoutSubviews
{
[super layoutSubviews]; // 注意,一定不要忘记调用父类的layoutSubviews方法!
self.button.frame = ... // 设置button的frame
self.label.frame = ... // 设置label的frame
}
经过以上的步骤,就可以实现自定义控件。
你试试看啊
1.通过按钮的事件来设置背景色
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button1 = [[UIButton alloc] initWithFrame:CGRectMake(50, 200, 100, 50)];
[button1 setTitle:@"button1" forState:UIControlStateNormal];
button1.backgroundColor = [UIColor orangeColor];
[button1 addTarget:self action:@selector(button1BackGroundHighlighted:) forControlEvents:UIControlEventTouchDown];
[button1 addTarget:self action:@selector(button1BackGroundNormal:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button1];
}
// button1普通状态下的背景色
- (void)button1BackGroundNormal:(UIButton *)sender
{
sender.backgroundColor = [UIColor orangeColor];
}
// button1高亮状态下的背景色
- (void)button1BackGroundHighlighted:(UIButton *)sender
{
sender.backgroundColor = [UIColor greenColor];
}
Button就是一个按钮,就是手机界面中可以点击的那种(点击之后跳转入另一个界面)
Button定义时有许多类型可以选择
一般情况下使用custom属于自定义型
1、定义一个Button按钮 (UIButton *按钮名;) 并且将其定义为自定义类型
2、button的大小 (按钮名+.frame)
3、button显示的字体名称加状态
(1) 一般使用这三种状态 ([按钮名 setTitle: forState:])
参数一:设置按钮标题(String类型)
参数二:设置按钮显示标题时所处的状态(系统自带)
(2) 这种定义标题的方式 不常用 (按钮名+.titleLabel.text)
4、button的背景颜色 (按钮名+.backgroundColor)
5、设置Button的背景图片
([按钮名 setBackgroundImage: forState:])
参数一:添加的图片 参数二:按钮所处状态
注意
背景图像会根据按钮的尺寸拉伸
按钮图像会居中显示在按钮中央位置
如果同时设置了按钮的图像和文字
按钮区域足够大,会并列显示图像和文字
如果区域不够大,优先显示图像
6、 设置Button的title颜色
([按钮名 setTitleColor: forState:])
参数一:选择颜色 参数二:按钮所处的类型
7、 给Button添加点击事件
([按钮名 addTarget: action: forControlEvents:])
参数 一: 对象 (self为自身)
参数 二: @selector(点击事件的方法名称)
参数 三: 为事件出发的类型 例如touch触碰,upinside点击
下面是在ViewDidLoad外面重新定义的一个方法用于点击了按钮
点击事件函数(当按钮点击时,运行函数)
一般页面之间的跳转,也在点击函数中添加
8、显示在当先视图下
首先是为normal下
高亮状态下
以上就是按钮的一些最普通的属性
谢谢观看!若是有错误,可以私信!谢谢
你在方法里 直接取sender.tag就行了.
也就是 btn addTarget: action:@selector(doSth:) touchevent:... // 记得括号里要加冒号,表示传参
- (void)doSth:(UIButton *)sender
{
sender.tag 就是你要的tag了
}