转自:http://www.jianshu.com/p/4971424c693b
我们知道IOS是没有类似RadioButton的单选框,So 我们来看下github 上start最多的项目RadioButton-ios的实现方式。地址:GitHub - onegray/RadioButton-ios: Lightweight RadioButton class for iOS
先看效果图:
![](http://upload-images.jianshu.io/upload_images/1370935-67aae76b0a3271c8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
接下来我们分析下源码:
这个项目只有两个文件:RadioButton.h和RadioButton.m,先看下RadioButton.h的内容:
![](http://upload-images.jianshu.io/upload_images/1370935-0a690451d5cd3eca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
其实也没什么,但是有个属性就比较的特殊:groupButtons,他用了IBOutletCollection的实现方式。这个关键字,可以将界面上一组相同的控件连接到同一个数组中。通常情况下,我们使用一个IBOutletCollection属性时,属性必须是strong的,且类型是NSArray。具体想了解更多IBOutletCollection,可以参考:IBOutletCollection的使用方法 - CocoaChina_让移动开发更简单。这里用IBOutletCollection主要还是为了方便能够在IB中方便操作,其实用NSArray实现也是一样的。
![](http://upload-images.jianshu.io/upload_images/1370935-c463efa3a5277c3a.gif?imageMogr2/auto-orient/strip)
RadioButton.m中最主要的方法
![](http://upload-images.jianshu.io/upload_images/1370935-2ba65a3f0c78bcae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果用IB方式进行组合的话,这个方法不需要你去主动调用。其实这个方法做的工作就是遍历buttons,然后通过NSValue的valueWithNonretainedObject方法将buttons设置到sharedLinks数组里面。为什么取sharedLink这个名字,主要是因为这些buttons引用的是同一个sharedLinks。之后其他的方法就是围绕着sharedLinks去操作,并通过NSValue的nonretainedObjectValue获取之前封装的值。注意:这里为什么要多此一举的用NSValue的两个方法,其实这里存在一个循环引用的问题,而NSValue的两个方法就是为了弱化这层关系,大家可以好好琢磨。
![](http://upload-images.jianshu.io/upload_images/1370935-72b9f835a5cbac43.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
选中之后的操作会执行这几个方法,主要是设置当前RadioButton选中状态,然后循环便利其他RadioButton状态为未选中状态。如果是用IB进行操作的话,选中和未选中的状态的背景可以通过如下图方法设置:
![](http://upload-images.jianshu.io/upload_images/1370935-920e37aadb126934.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我的步骤与代码:
1.先复制RadioButton.h和RadioButton.m到项目中
2.在storyboard中,拖拉button控件进view中,设置类为RadioButton并设置第一个button state 为Selected,这是默认选中
然后在State Config中设置Default 的 image为unchecked.png,Selected的image为checked.png
3.拉到viewcontroller.h中建立链接并创建动作,并在viewcontroller.m中#import "RadioButton.h"
@class RadioButton; @interface WifiGuestController : UIViewController @property (strong, nonatomic) IBOutlet RadioButton *reset_time_btn; @property (strong, nonatomic) IBOutlet RadioButton *extend_time_btn; - (IBAction)onRadioBtn:(RadioButton*)sender; @end
由于一次对应一个控件只能创建一个动作事件,重新回到storyboard中,打开第二个button的链接管理器,连线到Touch Up inside,选择第一个button的点击事件即可。
4.由于上文提到groupbuttons,如果不设置,RadioButtons之间的状态不会切换。
重新打开第一个button的链接管理器,找到groupbuttons,把旁边的+号连接到第二个button中即可。(第二个button不用重复设置)。
相关推荐
在iOS开发中,Radiobutton(单选按钮)和Checkbox(复选框)是常见的用户界面元素,用于收集用户的单选或多选输入。本示例项目“iOS Radiobutton, Checkbox Demo”提供了一种实现这两种控件的方法,对于初学者或者...
在iOS中,虽然没有直接对应的原生控件,但开发者通常会通过自定义UIComponent或者利用UIButton的样式来实现。在这个封装中,可能包括了创建一个RadioButton类,该类能够设置选中状态、颜色、边框宽度等属性,并提供...
在iOS开发中,`RadioButton`通常被称为单选按钮,它是一种常见的用户界面控件,用于在多个选项中让用户做出单一的选择。在本示例`RadioButtonDemo`中,我们将深入探讨如何在iOS应用中实现和使用单选按钮。单选按钮在...
在iOS开发中,单选按钮(RadioButton)是一种常见的用户界面元素,用于让用户在一组互斥选项中做出选择。本项目“RadioButton”是基于UIKit框架实现的Objective-C版本的单选按钮解决方案。下面将详细介绍iOS中单选...
- 在`res/values/styles.xml`文件中创建一个新的样式资源,用于定义RadioButton的外观。你可以自定义背景、文字颜色、边框宽度、圆角等属性。例如: ``` <style name="CustomRadioButton"> ...
在Android开发中,TabHost是一种常用的组件,用于创建带有可切换标签的用户界面,类似于iOS中的TabBar。然而,原始的TabHost组件在设计和自定义性方面可能无法满足所有需求,因此开发者常会选择替代方案来实现更理想...
在iOS开发中,实现单选按钮(radio button)通常是创建用户界面时的一个基本需求,用于让用户在一组选项中做出单一的选择。在这个场景中,我们关注的是由作者Friend-LGA编写的开源项目——LGRadioButtonsView。这个...
- 调整背景颜色、文字样式、边框等属性,使其更接近iOS的视觉效果。 2. 使用第三方库: - Android社区有许多开源库,如“android-segmented-control”或“android-segmented-switch”,这些库已经实现了iOS风格的...
此外,"仿IOS"标签意味着项目不仅关注视觉样式,还包括了iOS的交互模式。比如,滑动菜单(Sliding Menu)是iOS中常见的导航方式,对应于Android的抽屉布局(DrawerLayout)。从提供的文件名"library_SlidingMenu_new...
在`ATable Demo`中,可能对这些控件进行了自定义,以便它们看起来更像iOS样式。 3. Action Bar(或ToolBar):iOS中的导航栏与Android的Action Bar/ToolBar有明显的视觉差异。在Android中,我们可以使用`...
5. **样式资源**:为了达到iOS的视觉效果,开发者可能创建了自定义的样式资源(如颜色、尺寸、形状等),并应用到SegmentControl及其组成部分。 6. **动画效果**:为了增加用户体验,可能还包含了过渡动画,如按钮...
iOS的开关按钮(UISwitch)具有独特的视觉样式,包括一个可滑动的小圆点,当用户向左或向右滑动时,圆点会在两种颜色的背景之间移动,代表开关的状态变化。在Android上,虽然原生的CheckBox和RadioButton可以实现...
此外,为提高开发效率,可以考虑使用已有的第三方库,如Android-AlertDialog、SweetAlert等,它们提供了丰富的预设样式和方便的API,能快速实现iOS风格的弹出框。 总之,通过自定义View或利用第三方库,Android...
例如,如果你要模仿iOS的时间选择器,可以使用`HorizontalScrollView`配合一系列的`RadioButton`,每个代表一个小时。使用`OnClickListener`监听用户的点击事件,更新所选时间并关闭Dialog。 代码示例: ```java ...
通过调整`SwitchCompat`的样式,包括滑块的颜色、大小和形状,可以使其看起来更像iOS的开关。此外,设置合适的触摸反馈和动画效果,可以提高用户体验。 4. **时间选择器(DatePicker)**: iOS的时间选择器通常...
为了使SegmentView看起来更像iOS的Segment Control,我们还可以自定义RadioButton的样式。通过设置RadioButton的背景、文字颜色、边框等属性,可以使其外观更加接近iOS的样式。同时,可以通过调整RadioGroup的间距、...
4. **使用RadioButton Group**: 将RadioButton放入RadioGroup中,通过定制样式,可以模拟出Segmented Control的效果。每个RadioButton代表一个选项,RadioGroup负责管理它们的状态。 5. **动态编程**: 在代码中动态...
使用Swift,我们可以创建一个自定义的`RadioButton`和`CheckBox`类,继承自`UIView`,并在其中实现上述逻辑。可以创建一个`UIStackView`来管理同一组内的多个单选按钮或复选按钮,以便于布局和交互处理。 五、实际...
在iOS应用开发中,我们经常需要实现各种交互控件,其中单选按钮(Radio Button)是一种常见的选择方式,类似于JavaScript中的单选按钮功能。在JavaScript中,我们可以使用HTML的`<input type="radio">`标签来创建...