我创建了一个按钮。这是一个自定义按钮,显示未选中框的图像。当用户单击按钮时,图像将变为复选框,反之亦然,当用户再次单击它时。选中框时,布尔值为true,未选中时为布尔值。
我的目标是在用户单击按钮时尝试将此布尔值true或false传递给另一个视图控制器以执行其他任务。
有什么建议吗?我认为我不能使用使用标识符的prepareforsegue。
自定义UIButton的类
import UIKit
class CheckBox1: UIButton {
//images
let checkedImage = UIImage(named: "checked")
let unCheckedImage = UIImage(named: "unchecked")
//bool propety
var isChecked:Bool = false{
didSet{
if isChecked == true{
self.setImage(checkedImage, forState: .Normal)
}else{
self.setImage(unCheckedImage, forState: .Normal)
}
}
}
override func awakeFromNib() {
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
func buttonClicked(sender:UIButton) {
if(sender == self){
if isChecked == true{
isChecked = false
}else{
isChecked = true
}
}
}
}
答案 0 :(得分:0)
为什么要使用全局变量?特别是当您的isChecked
媒体资源已公开时,您可以访问它。
从那里,您可以使用prepareForSegue
方法。
复选框:保持原样
ViewController:
import UIKit
class ViewController: UIViewController {
@IBOutlet var myCheckBox: CheckBox!
override func viewDidLoad() {
super.viewDidLoad()
// ...
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Make sure you created the segue in the storyboard and match it's identifier name
if (segue.identifier == "firstToSecondVCSegue") {
let secondVC : SecondViewController = segue.destinationViewController as SecondViewController
secondVC.isChecked = myCheckBox.isChecked
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
SecondViewController:
import UIKit
class SecondViewController: UIViewController {
var isChecked : Bool?
override func viewDidLoad() {
super.viewDidLoad()
println("isChecked status : \(self.isChecked)")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我希望它有所帮助。
答案 1 :(得分:0)
所以,除了我以前的评论和你的评论之外,这里是一个在展开segue后更改UILabel的例子。
复选框:
import UIKit
class CheckBox: UIButton {
//images
let checkedImage = UIImage(named: "checked")
let unCheckedImage = UIImage(named: "unchecked")
//bool propety
var isChecked:Bool = false {
didSet {
if (self.isChecked) {
self.setImage(checkedImage, forState: .Normal)
} else {
self.setImage(unCheckedImage, forState: .Normal)
}
}
}
override func awakeFromNib() {
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
func buttonClicked(sender:UIButton) {
if (sender == self) {
if isChecked == true {
isChecked = false
} else {
isChecked = true
}
}
}
}
ViewController:
import UIKit
class ViewController: UIViewController {
var isChecked : Bool?
@IBOutlet var isCheckedLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Here, you could pass the status each time you access the secondVC.
}
@IBAction func unwindFromSecondVC(segue: UIStoryboardSegue) {
let secondVC : SecondViewController = segue.sourceViewController as SecondViewController
self.isChecked = secondVC.myCheckBox.isChecked
self.isCheckedLabel.text = self.isChecked?.description
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
SecondViewController:
import UIKit
class SecondViewController: UIViewController {
@IBOutlet var myCheckBox: CheckBox!
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// You can do stuff here if needed.
// But in your case, see firstVC.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
故事板:
它能回答你的问题吗?
答案 2 :(得分:-1)
确定而不是将变量移到类外,创建一个名为isCheckedGlobal的新变量或者与isChecked不同的东西。
import UIKit
var isCheckedGlobal = Bool() // !! Global Variable // You might need to change '= Bool()' to '= false' or '= true'
class CheckBox1: UIButton {
//images
let checkedImage = UIImage(named: "checked")
let unCheckedImage = UIImage(named: "unchecked")
//bool propety
var isChecked:Bool = false{
didSet{
if isChecked == true{
self.setImage(checkedImage, forState: .Normal)
}else{
self.setImage(unCheckedImage, forState: .Normal)
}
}
}
override func awakeFromNib() {
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
func buttonClicked(sender:UIButton) {
if(sender == self){
if isChecked == true{
isChecked = false
isCheckedGlobal = false // !! Set variable's value
}else{
isChecked = true
isCheckedGlobal = true // !! Set variable's value
}
}
}
}
然后在另一个类中使用isCheckGlobal来访问isChecked的值