美文网首页
UIButtonTypeSystem遇到的坑

UIButtonTypeSystem遇到的坑

作者: angry_zxy | 来源:发表于2018-11-07 11:03 被阅读0次

UIButtonType

UIButton提供了buttonWithType的类方法来初始化,UIButtonType是一个枚举:

typedef NS_ENUM(NSInteger, UIButtonType) {
    UIButtonTypeCustom = 0,                         // no button type
    UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),  // standard system button

    UIButtonTypeDetailDisclosure,
    UIButtonTypeInfoLight,
    UIButtonTypeInfoDark,
    UIButtonTypeContactAdd,

    UIButtonTypePlain API_AVAILABLE(tvos(11.0)) API_UNAVAILABLE(ios, watchos), // standard system button without the blurred background view

    UIButtonTypeRoundedRect = UIButtonTypeSystem   // Deprecated, use UIButtonTypeSystem instead
};

平时用的比较多的是UIButtonTypeCustom和UIButtonTypeSystem,其中UIButtonTypeCustom和[[UIButton alloc] init]都是自定义的button,目前使用起来感觉是一样的(此处不严谨,后续有新的发现再完善)。UIButtonTypeSystem是创建系统的button,系统button内做了一些处理,比如highlight时透明度为0.3,设置title的时候有动画效果。一般情况下,使用系统button可以很省事。

遇到的问题

系统button在设置title的时候是有一个动画效果的,在真机iPhone7p上测试动画效果大约是170ms,也就是说,当调用了setTitle设置后,需要170ms后才会真的设置,表现地效果就是文字淡入淡出的效果,这样似乎也没什么问题。当时当button本身有一个textA,然后再去修改为textB就会看到textA -> textB的切换。假设有一个tableView,复用的cell上有button,button的文字不是一样的。那么在reload的时候,就会出现cell的文字出现textA -> textB的切换,这个效果还是很糟糕的。

解决方法

  1. 可以使用UIButtonTypeCustom的button,自定义button在设置title的时候,是立即生效的,无动画过程。缺点是,你需要自己去实现按钮按下效果。按下效果推荐重写setHighLight的方法去实现,如果使用touch事件实现的话,在tableView的BounceVertical过程中,会只响应touchDown事件,而不响应touchUp事件(这个现象的原因有待研究,猜测和runloop机制有关)

  2. 取消系统button的设置动画,参考How to stop unwanted UIButton animation on title change?

    [UIView performWithoutAnimation:^{
        [myButton setTitle:text forState:UIControlStateNormal];
        [myButton layoutIfNeeded];
    }];
    

相关文章

  • UIButtonTypeSystem遇到的坑

    UIButtonType UIButton提供了buttonWithType的类方法来初始化,UIButtonTy...

  • iOS UIButtonTypeSystem

    通过UIButtonTypeSystem创建的UIButton,在设置UIButton的选中状态时,会看到一个默认...

  • UIButton 按钮

    pragma mark UIButton 按钮 UIButtonTypeSystem方式的 // 创建Bu...

  • UIButton渲染色蓝色的问题

    [UIButton buttonWithType:UIButtonTypeSystem]会默认带渲染色使用[UIB...

  • 利用GCD实现倒计时功能

    // 按钮的模式为UIButtonTypeCustom,如果为UIButtonTypeSystem 倒计时的时候会...

  • iOS UIButtonTypeCustom

    2016.11.21 系统自带样式的按钮:UIButtonTypeSystem 自定义UI的按钮:UIButton...

  • 系统类型(UIButtonTypeSystem)的UIButto

    Hightlighted状态下,title的颜色会变灰色。办法是继承或分类UIButton,并重写hightlig...

  • 常见的一些系统效果

    系统会对一些图片进行默认的蓝色渲染 设置tabBarItem的选中图片 设置UIButtonTypeSystem样...

  • 遇到的坑

    1.文字两端居中 2.多个异步请求的执行顺序 点击页面上一个按钮发送两个ajax请求时,这两个异步请求会同时发送,...

  • 遇到的坑

    1、 2、每次改完pom.xml后项目的 Language level都会变成7,使用了jdk8新功能的地方都会报...

网友评论

      本文标题:UIButtonTypeSystem遇到的坑

      本文链接:https://www.haomeiwen.com/subject/lupmxqtx.html