我正在尝试在ViewController中创建一个自定义下拉列表。将有5个下拉列表,每个列表将有4个选项。由于列表的数量,我决定为每个列表创建一个UIView,它有四个UIButtons形式的选择。现在,我只是尝试将其中一个删除;因此,下面的代码是一个下拉列表的代码,其中包含五个选项(包括所选的选项,我将在下面进一步解释)。
本质上,我想要的是有一个按钮显示选定的值(或启动时的默认值),然后当您单击该值时,包含4个按钮的UIView (也就是下拉列表)显示在原始按钮下面。当用户单击其中一个按钮时,我希望具有所选值的按钮具有已单击按钮的标题。
我有以下问题:
提前谢谢你--我知道这是一个很长的问题,我真的不确定这是否是我想要做的事情的好方法,但在我的头脑中这是有意义的。
这是我的ViewController代码
var buttonsLeft: buttonsView = buttonsView() // this is the UIView subclass
var time = UIButton.buttonWithType(UIButtonType.System) as! UIButton
override func viewWillAppear(animated: Bool) {
//hidden drop down list
self.buttonsLeft.frame = CGRect(x: self.view.bounds.width*(1/6) - 50, y:120, width:100, height: 135)
self.buttonsLeft.hidden = true
//button with selection showing or the default value at launch
self.time.frame = CGRectMake(self.view.bounds.width * (1/6) - 50, 90, 100, 30)
self.time.setTitle("1 DAY", forState: UIControlState.Normal)
self.time.addTarget(self, action: "showLeft", forControlEvents: UIControlEvents.TouchUpInside)
self.time.hidden = false
self.view.addSubview(self.time)
}
//this function shows the list
func showLeft(){
self.view.addSubview(self.buttonsLeft)
self.buttonsLeft.hidden = false
}
下面是UIView buttonsView的代码:
import UIKit
class buttonsView: UIView {
var option1 = UIButton()
var option2 = UIButton()
var option3 = UIButton()
var option4 = UIButton()
var buttons: Array<UIButton> = Array()
var title:String = String()
override init(frame: CGRect) {
super.init(frame: frame)
self.buttons = [option1, option2, option3, option4]
self.option1.setTitle("1 DAY", forState: UIControlState.Normal)
self.option2.setTitle("1 MONTH", forState: UIControlState.Normal)
self.option3.setTitle("1 YEAR", forState: UIControlState.Normal)
self.option4.setTitle("LONGER", forState: UIControlState.Normal)
var yStep = 35
for var i:Int = 0; i < 4; ++i {
var totalY:CGFloat = CGFloat(i*yStep)
buttons[i].frame = CGRectMake(0, totalY, 100, 30)
buttons[i].addTarget(self, action: "choseOption:", forControlEvents: UIControlEvents.TouchUpInside)
buttons[i].hidden = false
self.addSubview(buttons[i])
}
}
func choseOption(sender:UIButton){
self.title = sender.titleLabel!.text!
MyView().parentTitle = sender.titleLabel!.text! // my attempt at assigning to variable in View Controller
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
发布于 2015-04-18 06:51:54
委托将帮助您将值传递给UIViewController
。
下面是在delegate
中实现swift
的方法。
步骤1:在class
中声明协议,用于sending
数据。这是buttonsview
。
@objc protocol MyButtonDelegate{
optional func didSelectButton(text:String)
}
步骤2:现在在发送类中声明delegate
。这是buttonsview
。
class buttonsView: UIView {
var delegate:MyButtonDelegate?
[other stuf......]
}
步骤3:现在使用委托将数据发送到“UIViewController”。
func choseOption(sender:UIButton){
delegate!.didSelectButton(text: sender.titleLabel!.text!)
}
第四步:在接收课程中采用协议。
class ViewController: UIViewController,MyButtonDelegate {
步骤5:在接收类中实现委托方法。
func didSelectButton(text: String) {
parentTitle = "The Buttons title is " + text
}
步骤6:现在设置delegate
override func viewDidLoad() {
super.viewDidLoad()
buttonsLeft.delegate = self
}
希望这能帮到你。
https://stackoverflow.com/questions/29710381
复制相似问题