2015-03-06 3 views
0

VC1 имеет три кнопки «Card1», «Card2» и «Card3», каждый из которых переходит в VC2, который имеет четыре кнопки с изображениями «2s», «2h», 2с»и '2d'Возможно ли использовать переменную для замены ссылки

segue.identifiers являются Card1, Card2, Card3

кнопки '2s', '2h', '2c' и '2d' все размотки и переход должен заменить кнопку оригинальный Segue-абоненте изображение с изображением из Images.xcassets имени: «2с», «2h», «2c» или «2d» согласно кнопка, которая выбрана в VC2

CardSelected идентифицирует, какая кнопка VC2 под названием Unwin dSegue.

и развлечений SEGUE-идентификаторы 1, 2, 3, 4, соответственно, с 5-го «ясно, кнопка Segue-идентификатор в 0.

изображения объявлены в карты массива (VC1) и unwindSegue идентификатора используется для вызовите индекс.

можно ли закрепить этот код ...

EDIT ПОЛНЫЙ кОД КАК ЕСТЬ

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 (карты [index2], Форстате: UIControlState.Normal), как (X) .setImage (Карты [Index2], forState: UIControlState.Normal), где (X) заменяется кодом с текущим «вызывающим»

Я думал разместить UIButtons в массиве и называть его f ром массив, но

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

приносит ошибку: 'VC1.Type' не есть член с именем '' CARD1

+0

http://stackoverflow.com/questions/28955620/array-of-uibuttons-or-method-uibuttonnamed-string Использование массива решить переменную – Dustin

ответ

0

Конечно. Сделайте cards словарь в вашем пункте назначенияViewController.

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 
    } 
} 
+0

Как я получаю «Тема 1: EXC_BREAKPOINT (code = EXC_1386_BPT, subcode = 0x0). Должен ли я заполнять var cards = [String: String]() со всеми возможными «F1Card» ... «F23Card» и т. Д. – Dustin

+0

Или мне нужно сделать DVC a подкласс ViewController (который является моим именем VC1)? – Dustin

+0

Используйте ViewController и добавьте карты в ViewController. DVC был просто заполнителем. Вы должны добавить все карты в массив карт. – kellanburket