将按钮标签传递给另一个活动中的字符串

时间:2015-05-18 16:45:08

标签: ios swift

我的代码运行时没有任何错误,但它没有将按钮的标签传递给下一个活动

这是代码

class SecondViewController: UIViewController {

    @IBOutlet weak var Properties: UIButton!
    @IBOutlet weak var games: UIButton!
    @IBOutlet weak var electronics: UIButton!
    @IBOutlet weak var Vehicles: UIButton!
    @IBOutlet weak var Accessories: UIButton!

    @IBOutlet weak var searchTitle: UISearchBar?

    override func viewDidLoad() {
        super.viewDidLoad()


        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var pass:searchResultView = segue.destinationViewController as! searchResultView
        if(electronics.selected){
            if(searchTitle?.text != nil){
                pass.tit = searchTitle?.text
            }
        pass.received = electronics.titleLabel!.text!
        }
        else if(games.selected){
            if(searchTitle?.text != nil){
                pass.tit = searchTitle?.text
            }
            pass.received = games.titleLabel!.text!
        }
        else if(Properties.selected){
            if(searchTitle?.text != nil){
                pass.tit = searchTitle?.text
            }
            pass.received = Properties.titleLabel!.text!
        }
        else if(Vehicles.selected){
            if(searchTitle?.text != nil){
                pass.tit = searchTitle?.text
            }
            pass.received = Vehicles.titleLabel!.text!
        }
        else if(Accessories.selected){
            if(searchTitle?.text != nil){
                pass.tit = searchTitle?.text
            }
            pass.received = Accessories.titleLabel!.text!
        }
    }

当我尝试在其他活动中打印字符串时,它什么都不打印

这是其他活动的代码

class searchResultView: UIViewController {

    var received:String = ""
    var tit:String? = nil

    override func viewDidLoad() {
        super.viewDidLoad()
        println(received)
        println(tit)

        println("jsoidjf")
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

请任何人帮助我,我迷路了!

2 个答案:

答案 0 :(得分:1)

您有两个选择

1。设置segues的标识符

您需要在Interface Builder中设置segue的标识符,以检测哪一个被触发:

  • 单击要为
  • 设置标识符的segue 在左侧
  • ,您将看到突出显示segue来自
  • 的按钮 右侧的
  • 选择Attributes Inspector并输入标识符

enter image description here

然后相应地将代码更改为:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var pass:searchResultView = segue.destinationViewController as! searchResultView
    if (segue.identifier == "electronicsSegue") { 
    /* choose the same identifier as in the attribute inspector */
        if(searchTitle?.text != nil){
            pass.tit = searchTitle?.text
        }
        pass.received = electronics.titleLabel!.text!
    }
}

2。检查发件人对象

这个版本更容易执行,但不是很干净,检查触发的segue的发送者是否等于你的一个按钮:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var pass:searchResultView = segue.destinationViewController as! searchResultView
    let senderButton = sender as! UIButton

    if(senderButton == electronics){
        if(searchTitle?.text != nil){
            pass.tit = searchTitle?.text
        }
        pass.received = electronics.titleLabel!.text!
    }
}    

两种解决方案输出

  

电子

     

可选("&#34)

     

jsoidjf

答案 1 :(得分:0)

添加此方法并尝试。创建@IBAction方法

@IBAction func electronicsAction(sender: UIButton) {

  self.performSegueWithIdentifier("PushToSearchViewController", sender: self)
  self.electronics.selected = true
}

首先为segue提供标识符,我在这里只为电子按钮做。