【问题标题】:Is it possible to use a variable to replace a reference是否可以使用变量来替换引用
【发布时间】:2015-03-06 20:01:02
【问题描述】:

VC1 有 'Card1'、'Card2' 和 'Card3' 三个按钮,每个都与 VC2 有四个按钮,分别是图像 '2s'、'2h'、'2c' 和 '2d'

segue.identifiers 是 Card1、Card2、Card3

按钮 '2s', '2h', '2c' 和 '2d' 都展开 segue 并且应该将原始 segue-caller 按钮图像替换为来自 Images.xcassets 的图像,名称为:'2s'、'2h'、'2c'或 '2d' 根据在 VC2 中选择的按钮

CardSelected 标识哪个 VC2 按钮称为 unwindSegue。

和 unwind segue-identifiers 分别为 1、2、3、4,第 5 个“清除按钮 segue-identifier 为 0”。

图像在数组 Cards (VC1) 中声明,unwindSegue-identifier 用于调用索引。

是否可以合并这段代码...

按原样编辑完整代码

VC1

import UIKit

class VC1: UIViewController {

@IBOutlet weak var Card1: UIButton!
@IBOutlet weak var Card2: UIButton!
@IBOutlet weak var Card3: UIButton!

let Cards: [UIImage] = [UIImage(named: "Default")!, UIImage(named: "2s")!,UIImage(named: "2h")!,UIImage(named: "2c")!,UIImage(named: "2d")!,]

var caller = ""
var Index2 = Int()

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let KVC = segue.destinationViewController as VC2
    KVC.source = segue.identifier!}

@IBAction func unwind(unwindSegue: UIStoryboardSegue){
    Card1.setImage(Cards[Index2], forState: UIControlState.Normal)
    //I want to replace Card1.setImage with (UIButton with name = "caller").setImage
    //instead of having
    //if caller = "Card1" {Card1.setImage(Cards[Index2], forState: UIControlState.Normal)} else if caller = "Card2" {Card2.setImage(Cards[Index2], forState: UIControlState.Normal)} else if caller = "Card3" {Card3.setImage(Cards[Index2], forState: UIControlState.Normal)}
}

@IBAction func text(sender: AnyObject) {
    println(caller)
    println(Index2)
}

}

VC2

import UIKit

class VC2: UIViewController {

var CardSelected = ""
var source = ""

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    CardSelected = segue.identifier!
    var Index:Int = CardSelected.toInt()!
    let DVC = segue.destinationViewController as VC1
    DVC.caller = source
    DVC.Index2 = Index

}
}

在 VC1 中,我想以某种方式将 Card1.setImage(Cards[Index2], forState: UIControlState.Normal) 设为 (X).setImage(Cards[Index2], forState: UIControlState.Normal) where (X ) 在代码中替换为当前的“调用者”

我想将 UIButtons 放在一个数组中并从数组中调用它,但是

let CardCaller: [UIButton] = [UIButton(Card1)!, UIButton(Card2)!, UIButton(Card3)!]  //in VC1

带来错误:“VC1.Type”没有名为“Card1”的成员

【问题讨论】:

标签: ios swift


【解决方案1】:

当然。在您的destinationViewController 中创建cards 字典。

var CardPicked = String()
var sourceMessage : NSString = ""

class ViewController: UIViewController {
    var cards = [String: String]()
}

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "Back" {

    } else {
        CardPicked = segue.identifier!
        let dvc = segue.destinationViewController as ViewController
        dvc.cards[sourceMessage] = CardPicked
    }
}

【讨论】:

  • 我得到“线程 1:EXC_BREAKPOINT(代码=EXC_1386_BPT,子代码=0x0)。我必须用所有可能的“F1Card”填写 var cards = [String: String]()。 ..“F23Card”等?
  • 或者我是否必须让 DVC 成为 ViewController 的子类(这是我的 VC1 的名称)?
  • 使用 ViewController 并将卡片添加到 ViewController。 DVC 只是一个占位符。您应该将所有卡片添加到卡片数组中。
  • 我有.. 类 ViewController: UIViewController { var cards = ["F1Card", "F2Card"]...AS TO 行。 dvc.cards[sourceMessage] = CardPicked(错误 NSString 不能转换为 'int')
  • 对不起,我说错了。你需要一本字典:["F1Card": "", "F2Card": ""]
猜你喜欢
  • 2017-08-26
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2019-10-28
  • 2023-03-04
  • 1970-01-01
  • 2013-02-07
相关资源
最近更新 更多