深度定制一个按钮

http://www.cnblogs.com/ygm900/archive/2013/05/28/3104169.html

UIButton *btnTemp = [UIButtonbuttonWithType:UIButtonTypeCustom];

深度定制一个按钮

UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    btn1.frame = CGRectMake(0, 0, 200, 140);
    btn1.center = CGPointMake(180, 215);
    btn1.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
    [btn1 setTitle:@"" forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(btnTest) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn1];

注意:通过 [UIButton buttonWithType:UIButtonTypeCustom] 创建的按钮不能手动release,交给系统好了。不能写 [button release];

疑问 & 发现

两种不同的创建方式,其中一种button 可以显示titile,但是另外一种不能显示。如下所示;

//            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];    //使用这种创建方式,button 不能显示 titile
//            button.frame = CGRectMake(10+(Screen_width*schemeCount)+30+100, 20+(j*30), 130, 40);
                        //使用alloc的方式创建,button 可以显示title
            UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(10+(Screen_width*schemeCount)+30+100, 20+(j*30), 130, 40)];
            [button setTitle:@"1" forState:UIControlStateNormal];
            [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button setBackgroundColor:[UIColor whiteColor]];
            [self.uisv_bottomView addSubview:button];
            [button release];

找到狗血的原因了!使用如下方法创建button时,不能使用[button release]; 否则,button 不能显示标题


UIButton *button = buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(10+(Screen_width*schemeCount)+30+100, 20+(j*30), 130, 40);

疑问:经过实践发现,当把一个button 依附到一个 imageview时,button按钮没有按下去的效果,而且,不能够设置背景图片。只能设置颜色。下面代码,在[imageView addSubView:button]; 不起作用。为什么? 难道button 只能add到view上?而不是imageView上?(是不是也因为狗血的 release 啊)

[button setBackgroundImage:[UIImage imageNamed:@"button_anpai.png"] forState:UIControlStateNormal];

设置UIButton的文字显示位置、字体的大小、字体的颜色

btn.frame = CGRectMake(x, y, width, height);

[btn setTitle: @"search" forState: UIControlStateNormal];

//设置按钮上的自体的大小

//[btn setFont: [UIFont systemFontSize: 14.0]];    //这种可以用来设置字体的大小,但是可能会在将来的SDK版本中去除改方法

//应该使用

btn.titleLabel.font = [UIFont systemFontOfSize: 14.0];

[btn seBackgroundColor: [UIColor blueColor]];

//最后将按钮加入到指定视图superView

[superView addSubview: btn];        //为什么要指定到superview?

==========================================================

tvnamelabel=[[UIButton alloc]initWithFrame:CGRectMake(5,5,200,40)];

这样初始化的button,文字默认颜色是白色的,所有如果背景也是白色的话,是看不到文字的,

btn.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft ;//设置文字位置,现设为居左,默认的是居中

但是问题又出来,此时文字会紧贴到做边框,我们可以设置

btn.contentEdgeInsets = UIEdgeInsetsMake(0,10, 0, 0);

使文字距离做边框保持10个像素的距离。

=======================================================

设置UIButton上字体的颜色设置UIButton上字体的颜色,不是用:

[btn.titleLabel setTextColor:[UIColorblackColor]];

btn.titleLabel.textColor=[UIColor redColor];

而是用:

[btn setTitleColor:[UIColor blackColor]forState:UIControlStateNormal];

长按按钮响应事件

{

 //长按删除按钮
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(deleteLongPressed)];
//    longPress.minimumPressDuration = 0.5;    //最短按压时间,一般地,此句不写也可以
    [uib_delete addGestureRecognizer:longPress];

}

//长按删除按钮,删除所有输入的号码
-(void)deleteLongPressed
{
    uil_phoneNumber.text = @"";
    nsms_phoneNumber = [[NSMutableString alloc]initWithFormat:@""];
}

UIButton 两种设置背景图片方式的区别

第一种:setBackGroudImage   :图片被拉伸

第二种:setImage     :  图片保持原大小

参考:http://my.oschina.net/joanfen/blog/160843    讲图片进行拉伸设置为button的背景。

非alloc 的button 都不要release ,否则button 显示不出来。虽然button的 retaincount 还是1 。如下

        //button 剧集
        button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0, k_headImageView_height, SCREEN_WIDTH/2-1, 84/2-1);
        [button setBackgroundImage:[ImageUtilities createImageWithColor:[UIColor whiteColor]] forState:UIControlStateNormal];
        [button setBackgroundImage:[ImageUtilities createImageWithColor:[ColorUtils colorWithHexString:k_buttonSelect_backGroudColor]] forState:UIControlStateSelected];
        [button setTitle:@"剧集" forState:UIControlStateNormal];
        [button.titleLabel setFont:[UIFont systemFontOfSize:k_introduceInfo_fontSize]];
        [button setTitleColor:[ColorUtils colorWithHexString:k_introduceInfo_textColor] forState:UIControlStateNormal];
        [button setTitleColor:[ColorUtils colorWithHexString:k_buttonSelect_textColor] forState:UIControlStateSelected];
        [button addTarget:self action:@selector(btnEpisodeClicked:) forControlEvents:UIControlEventTouchUpInside];
        episodeButton = button;
        [self.view addSubview:episodeButton];
        //[button release];    //   若此处添加 release, button 将显示不出来。

如何设置能让UIButton点一下,保持按下去的状态,再点一下弹起来?

方法:做一个判断修改selected属性如:    [_tmpBtn setSelected:YES]; OR [_tmpBtn setSelected:NO];

UIButton 的的对象 button 有三种 状态,分贝是normal   selected  highlighted ,他们之间有什么区别?

UIControlStateNormal  指按钮的正常状态,这个没有异议吧。

UIControlStateHighlighted   指按钮被按下去时的状态!

UIControlStateSelected       指按钮被选中时的状态!

“按下去”和“选中”有什么区别?“按下去时状态”指被手指按压时的状态。“选中时状态”指手指按压已经完毕,并离开。按钮呈现的状态。所以,设置一个按钮被按下去时的图片变化时,要用UIControlStateHighlighted而不是UIControlStateSelected。

 参考:关于UIButton的highlighted状态的总结

UIButton的一个小陷阱——注意:titleLabel是readonly的!

在使用UIButton的时候,有时需要在运行时动态改变按钮的文字、样式。但iOS SDK的文档说得不是很清楚,使用错误的API经常会产生诡异的结果,如点击UIButton后,text变回默认值。

这问题我遇到过三回了,每回都要重新google一下才解决。以前觉得这些不起眼的小问题,不值得单独写一篇文章,但往往这些问题现常见。以后会持续把遇到的一些小问题作为Tips的形式分享出来,希望也可以帮助到其它的开发者。

错误的方式

1
2
/* Wrong way */
yourButton.titleLabel.text = @"SampleText";

这里titleLabel是readonly的,但我们可以改变titleLabel的property。问题出在UIButton是有Default, Highlighted, Selected, Disabled几种状态的。这种方式会改变当前状态的text,但一旦状态改变(如tap一下),则会变成默认的设置。

正确的方式

1
2
/* Right way */
[yourButton setTitle:@"SampleText" forState:UIControlStateNormal];

如果其它状态没有特别设置的话,设置UIControlStateNormal这个状态,会自动设置其它状态。

参考:http://www.iwangke.me/2012/09/05/caveat-for-uibutton/

让UIButton在按下时没有高亮效果

方法一:

button1.adjustsImageWhenHighlighted = NO;     //取消按钮高亮状态(有些时候,我们并不想要系统给的那个状态)

参考:http://www.cocoachina.com/bbs/simple/?t106229.html

方法二:为UIButton所有状态设置一张透明的图片。详情请看:让UIButton在按下时没有高亮效果

设置按钮被点中的高亮光晕效果

[cancelButton setShowsTouchWhenHighlighted:YES];

按钮扩大触摸响应区域

原来代码如下:menuBtn.frame = CGRectMake(4, 8, 44, 28);
扩大触摸区域代码如下:
[menuBtn setImage:[PYUtiles imageFromFile:@"MenuBtn.png"] forState:UIControlStateNormal];
[menuBtn setFrame:CGRectMake(0, 0, 48, 44)];
[menuBtn setContentMode:UIViewContentModeCenter];
原理,扩大button的frame rect,并且将图片设置成居中即可
注意,这边要是setImage,setBackgroundImage不行,会扩大图片到整个响应区域

参考:http://www.myexception.cn/mobile/550219.html

设置UIButton 的字体阴影

[[rightButton titleLabel] setShadowColor:[UIColor blackColor]];
[[rightButton titleLabel] setShadowOffset:CGSizeMake(-0.5, -0.5)];

调整Button内部内容的边距(Padding)

[self.userNameButton setContentEdgeInsets:UIEdgeInsetsMake(0, 3, 0, 0)];  

参考:http://blog.csdn.net/ysy441088327/article/details/7660183

保持UIButton高亮状态  (点击进入)

参考:关于UIButton的highlighted状态的总结 (在按钮up的时候button的highlighted状态会被clear,)

关于UIButton选中和高亮状态下的图片切换 (点击进入)

总结:当button的状态为selected的时候,高亮时对应的状态应该是selected|highlighted,这与normal下高亮的状态highlighted不同。

代码如下:

[myButton setImage:imageSelectedHover forState:(UIControlStateSelected | UIControlStateHighlighted)];

UIButtonTypeCustom 和  UIButtonTypeRoundedRect  的区别

UIButtonTypeCustom :是一个背景透明的按钮。  如果想做按钮中图片切换(不同状态),必须使用两张图片进行设置。

UIButtonTypeRoundedRect :是一个圆角矩形按钮。方便之处:系统会自动为这种按钮设置高亮状态(半透明状态)。即,通过一张图片,就可以做出按钮交互的效果。 不方便的地方:如果你想自定义不同状态下,按钮显示的背景,这种类型的按钮就支持的不好。

建议:快速开发,每个按钮只有一张图片,建议使用UIButtonTypeRoundedRect。按钮高度自定义,建议使用UIButtonTypeCustom。

titleEdgeInsets  imageEdgeInsets 的使用

[myButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 4个参数是上边界,左边界,下边界,右边界。

使用UIButton和UIImageView时的坑

-》使用将UIButton设置为透明,然后使用UIImage 或者UIImageView作为UIButton的父view,可能会使UImage覆盖的那片UIButton区域失去事件响应。解决方案:设置UIimage或者UIImageView的人机交互属性为YES.     ***.userInteractionEnabled = YES;

2、同理,如果将一个imageview作为uibutton的子view赋给uibutton,那么uibutton被覆盖的区域将失去事件响应能力。解决方案:让uibutton在上层,imageview在下层即可。注意,此处设置人机交互属性为YES也是没用的哦。

uibutton增加长按事件之后怎么识别自己uibutton.tag

UIButton *btn =(UIButton*)gesture.view;NSLog(@"%d",btn.tag);

时间: 2024-10-13 06:21:14

深度定制一个按钮的相关文章

如何使用LESS 深度定制Bootstrap

一.LESS是什么? Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. 中文介绍:http://lesscss.cn/ 有JS基础的同学应该很快就能掌握LESS 二.准备工作,在一个bootstrap项目中使用LESS. 上面的网站介绍了LESS的多种入门方法,这里主要以npm+webstorm 为例:在本地项目中使用LESS生成CSS 通过LESS的语言特性减少编写和维护的难度: 解压npm 得到如下文件: 在web

定制个性化按钮

效果 说明 通过捕捉一个按钮不同状态的值来定制我们自己的按钮动画,本人仅仅提供了实现的抽象基类以及一个简单的示例,剩下的需要你根据自己的想象力创造了. 源码 https://github.com/YouXianMing/BaseButton // // BaseControl.h // BaseButton // // Created by YouXianMing on 15/8/27. // Copyright (c) 2015年 YouXianMing. All rights reserve

基于nginx + dwz定制一个网站

前言 原创文章欢迎转载,请保留出处. 若有任何疑问建议,欢迎回复. 邮箱:[email protected] 稍微花了点时间定制了一个简单的dwz网站,主要利用框架制作了主界面和简单地调用了jQuery.ajax查询json. 利用dwz框架模板 之前已经搭建好dwz了,由于之前搭建的dwz后来使用的时候出现了bug,所以这里我使用新版的dwz 1.4.6,可以到https://code.google.com/p/dwz/downloads/list下载.这里我们只是使用dwz框架而已,所以暂时

一次和别人争吵一个按钮,点击后显示导航;再点击不显示的效果,是否一定以及必须用js?

事情经过是这样的,我们组一个说话很喜欢用一定,肯定的哥们,吃午饭的时候拿了自己做的一个UI库,头部有一个按钮 点击展开,再次点击收缩,他意思说一个按钮无法记录点击状态,必须使用js.然后我看了一眼,心想target有可能能做到这个效果,然后我说不一定,他还是说肯定,还要跟我打赌说:如果我能做出来,给我500块.如果我做不出怎样? 因为到底具体还没有实践过,而且我只是说不一定,所以我没有当场和他打赌,然后他就自己给我定条件说: 如果做不出,你请大家吃顿饭. 听他这么说我就有点不高兴了,你自己说肯定

Python3 Tkinter基础 Menubutton 设置一个按钮 点击按钮出现下拉菜单

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() #配置一个按钮并放置 menubutton=Menubutton(root, text='单击出现下拉菜单', relief=RAISED) menubutton.pack() userChoice

当一个按钮点击不了时,鼠标可以自定义的样式

现在很多网站流行做法,当一个按钮点击不了的时候,会给用户一个略显优雅的提示,即鼠标手势的样式发生变化.简单的样式变化. 图方便就利用下jquery...主要就是注意下,cursor值的用法 $('#www').mouseout(function(){ $('body').css('cursor', 'default'); }); $('#www').mouseover(function(){ $('body').css({'cursor':'url("cursor.png"),defa

代码添加一个按钮及监听方法

有时候无法从控件中拖拽一个按钮到storyboard,必须用编写代码方式添加按钮: 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view, typically from a nib. 5 //计算出展示表情区域的宽和 展示区距顶部的高度+10个偏移量 6 //添加按钮 9 //创建button 10 addBtn = [[UIButton alloc

JavaScript点击事件/一个按钮触发另一个按钮

给按钮2添加点击事件click触发按钮1的点击事件,就算给按钮1添加样式display: none;或visibility: hidden;隐藏起来也能触发. <button type="button" id="btn1" onclick="alert('我是按钮1的弹框')" >按钮1</button> <button type="button" id="btn2">按

Android开发学习笔记--给一个按钮定义事件

学习Android的第一天,了解了各种布局,然后自己动手画出了一个按钮,然后给按钮定义了一个事件是弹出一条消息显示“我成功了!”字样,具体过程如下: 1.修改布局文件activity_main.xml加入如下语句(我把原来的那个文本框删掉了) <Button android:id="@+id/button1" android:onClick="button_click" android:layout_width="wrap_content"