在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
想要实现单选按钮Radio button: swift radio button swift radio button lib shamasshahid/s-s-radioButtonsController: A Radio Button Controller class for iOS written in Swift swift – How to create NSRadioButton Group in Xcode 7 OSX – Stack Overflow iphone – Best radio-button implementation for IOS – Stack Overflow iPhone UIButton tutorial: Radio Buttons – Mobisoft Implementing Radio Button-Like Behavior in iOS Applications – DZone Mobile TNSwiftyCheckboxGroup, create checkbox groups in Swift gui design – What is the iOS alternative to a radio button? – User Experience Stack Exchange 先去试试: DavydLiu/DLRadioButton: A highly customizable Radio Button for iOS 最后用: // // LeftLabelRightRadioButtonTableViewCell.swift // SalesApp // // Created by licrifan on 16/6/10. // Copyright © 2016年 licrifan. All rights reserved. // import UIKit import Cartography import DLRadioButton let LeftLabelRightRadioButtonTableViewCellId:String = "LeftLabelRightRadioButtonTableViewCellId" let SingleRadioButtonWidth:CGFloat = 60 let RadioButtonUnselectedImage = UIImage(named: "radio_button_unselected")! let RadioButtonSelectedImage = UIImage(named: "radio_button_selected")! class LeftLabelRightRadioButtonTableViewCell: LeftLabelRightTextfieldTableViewCell { init(editable:Bool = false, reuseIdentifier: String? = nil, leftLabelText:String = "", isMandatory:Bool = false, optionList:[String] = [String](), curSelectedIdx:Int = 0 ) { if editable { super.init(editable: false, reuseIdentifier: reuseIdentifier ?? LeftLabelRightRadioButtonTableViewCellId, leftLabelText: leftLabelText, isMandatory: isMandatory) self.rightTextfield.hidden = true let firstRadioButton = DLRadioButton() radioButtonCommonSetup(firstRadioButton) firstRadioButton.setTitle(optionList[0], forState: UIControlState.Normal) self.contentView.addSubview(firstRadioButton) //for debug firstRadioButton.backgroundColor = UIColor.greenColor() constrain(firstRadioButton) {firstRadioButton in firstRadioButton.left == firstRadioButton.superview!.left + RightTextfiledPaddingLeftToParent firstRadioButton.centerY == firstRadioButton.superview!.centerY firstRadioButton.width == SingleRadioButtonWidth } var otherButtonList = [DLRadioButton]() for curIdx in 1..<optionList.count { let curSelection = optionList[curIdx] gLog.verbose("[\(curIdx)] curSelection=\(curSelection)") let curRadioButton = DLRadioButton() radioButtonCommonSetup(curRadioButton) curRadioButton.setTitle(curSelection, forState: UIControlState.Normal) self.contentView.addSubview(curRadioButton) let currentButtonPaddingLeft:CGFloat = RightTextfiledPaddingLeftToParent + (CGFloat(curIdx)*SingleRadioButtonWidth) gLog.verbose("currentButtonPaddingLeft=\(currentButtonPaddingLeft)") constrain(curRadioButton) {curRadioButton in curRadioButton.left == curRadioButton.superview!.left + currentButtonPaddingLeft curRadioButton.centerY == curRadioButton.superview!.centerY curRadioButton.width == SingleRadioButtonWidth } otherButtonList.append(curRadioButton) } firstRadioButton.otherButtons = otherButtonList } else { //…. } } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } func logSelectedButton(radioButton: DLRadioButton) { if (radioButton.multipleSelectionEnabled) { for button in radioButton.selectedButtons() { gLog.verbose(String(format: "%@ is selected.\n", button.titleLabel!.text!)); } } else { gLog.verbose(String(format: "%@ is selected.\n", radioButton.selectedButton()!.titleLabel!.text!)); } } func radioButtonCommonSetup(radioButton:DLRadioButton) { gLog.verbose("radioButton=\(radioButton)") //for debug radioButton.backgroundColor = UIColor.yellowColor() // radioButton.titleLabel?.textAlignment = .Left radioButton.titleLabel!.font = RightTextFieldTextFont radioButton.setTitleColor(RightTextFieldTextColor, forState: UIControlState.Normal) radioButton.icon = RadioButtonUnselectedImage radioButton.iconSelected = RadioButtonSelectedImage radioButton.marginWidth = 0 radioButton.iconStrokeWidth = 2 // radioButton.iconSize = RadioButtonUnselectedImage.size.width radioButton.indicatorSize = 1 radioButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left radioButton.addTarget(self, action: #selector(self.logSelectedButton(_:)), forControlEvents: UIControlEvents.TouchUpInside) } } //1.3 customer gender cell let customerGenderCell = LeftLabelRightRadioButtonTableViewCell(editable: self.editable, leftLabelText: "性别", optionList: ["男", "女", "变态"], curSelectedIdx: self.curCustomerItem.genderIndex) 基本达到了效果: 选中按钮输出的log: 2016-06-14 21:29:07.726 [Verbose] [main] [LeftLabelRightRadioButtonTableViewCell.swift:109] logSelectedButton > 男 is selected. 2016-06-14 21:29:08.600 [Verbose] [main] [LeftLabelRightRadioButtonTableViewCell.swift:109] logSelectedButton > 女 is selected. 2016-06-14 21:29:09.310 [Verbose] [main] [LeftLabelRightRadioButtonTableViewCell.swift:109] logSelectedButton > 变态 is selected. 2016-06-14 21:29:10.252 [Verbose] [main] [LeftLabelRightRadioButtonTableViewCell.swift:109] logSelectedButton > 男 is selected. ->但是,此处的,左边的button按钮和右边的title的间距 尝试了N种设置: radioButton.titleLabel?.textAlignment = .Left radioButton.marginWidth = 0 radioButton.iconStrokeWidth = 2 // radioButton.iconSize = RadioButtonUnselectedImage.size.width radioButton.indicatorSize = 1 radioButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left 都没用。 -》感觉是,这个库没写好,有bug啊。。。 搞得没法实现我要的,文字紧挨着左边的按钮的效果 转载请注明:在路上 » [基本解决]swift中实现单选按钮 |
请发表评论