首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIView类用于下拉列表和UIButtons -委托/协议问题?

UIView类用于下拉列表和UIButtons -委托/协议问题?
EN

Stack Overflow用户
提问于 2015-04-17 22:20:27
回答 1查看 1.6K关注 0票数 2

我正在尝试在ViewController中创建一个自定义下拉列表。将有5个下拉列表,每个列表将有4个选项。由于列表的数量,我决定为每个列表创建一个UIView,它有四个UIButtons形式的选择。现在,我只是尝试将其中一个删除;因此,下面的代码是一个下拉列表的代码,其中包含五个选项(包括所选的选项,我将在下面进一步解释)。

本质上,我想要的是有一个按钮显示选定的值(或启动时的默认值),然后当您单击该值时,包含4个按钮的UIView (也就是下拉列表)显示在原始按钮下面。当用户单击其中一个按钮时,我希望具有所选值的按钮具有已单击按钮的标题。

我有以下问题:

  1. 我希望能够将四个按钮的标题从ViewController传递给UIView,因为我希望对四个按钮的标题使用不同值的UIView多次。我不知道如何将值传递给UIView类。
  2. 当单击下拉列表(即UIButton)中的选项时,我无法确定如何将按钮标题的值从UIView传递回UIViewController。我尝试将标题设置为ViewController中的一个变量,但这不起作用(显示为零)。

提前谢谢你--我知道这是一个很长的问题,我真的不确定这是否是我想要做的事情的好方法,但在我的头脑中这是有意义的。

这是我的ViewController代码

代码语言:javascript
运行
复制
    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的代码:

代码语言:javascript
运行
复制
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")
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-18 06:51:54

委托将帮助您将值传递给UIViewController

下面是在delegate中实现swift的方法。

步骤1:在class中声明协议,用于sending数据。这是buttonsview

代码语言:javascript
运行
复制
@objc protocol MyButtonDelegate{
     optional func didSelectButton(text:String)
}

步骤2:现在在发送类中声明delegate。这是buttonsview

代码语言:javascript
运行
复制
class buttonsView: UIView {
     var delegate:MyButtonDelegate?
     [other stuf......]
}

步骤3:现在使用委托将数据发送到“UIViewController”。

代码语言:javascript
运行
复制
  func choseOption(sender:UIButton){

  delegate!.didSelectButton(text: sender.titleLabel!.text!)

} 

第四步:在接收课程中采用协议。

代码语言:javascript
运行
复制
 class ViewController: UIViewController,MyButtonDelegate {

步骤5:在接收类中实现委托方法。

代码语言:javascript
运行
复制
func didSelectButton(text: String) {
     parentTitle = "The Buttons title is " +  text

  }

步骤6:现在设置delegate

代码语言:javascript
运行
复制
 override func viewDidLoad() {
    super.viewDidLoad()

    buttonsLeft.delegate = self


    }

希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29710381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档