swift - 使用 PickerView 将卡片图片设置为其名称

标签 swift xcode

我有一个 pickerView,我已对其进行编码,用于显示一副牌中所有 52 张牌的等级和花色。在此 pickerView 下,我有 UIImage,用于在 PickerView 中选择卡片时显示卡片的图像。

这对我来说是一个非常新的主题,我不太确定如何处理它。

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    @IBOutlet weak var selectedCard: UIImageView!
    @IBOutlet weak var cardPicker: UIPickerView!

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    var test: String = "(generateDeckOfCards())"

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return theDeck.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {  
        return "\(theDeck[row].rank) of \(theDeck[row].suit)"
    }

    var cardPicked: String = "" //used for saving

    override func viewDidLoad() {
        super.viewDidLoad()
        cardPicker.dataSource = self
        cardPicker.delegate = self
        selectedCard.image = UIImage(named: "spade1")
    }
}

struct Card {
 let rank: Rank
 let suit: Suit

enum Rank: Int{
    case two = 2
    case three, four, five, six, seven, eight, nine, ten
    case Jack, Queen, King, Ace

    func rankDescription() -> String {
        switch self {
        case .Jack: return "Jack"
        case .Queen: return "Queen"
        case .King: return "King"
        case .Ace: return "Ace"
        default: return String(self.rawValue)
        }
    }
}
enum Suit: String {
    case Diamond = "♦️"
    case Heart = "♥️"
    case Spade = "♠️"
    case Club = "♣️"
}
}
func generateDeckOfCards() -> [Card] {
 var myDeckOfCards: Array = [Card]()
 let maxRank = Card.Rank.Ace.rawValue
 let aSuit: Array = [Card.Suit.Club.rawValue, 
 Card.Suit.Diamond.rawValue, Card.Suit.Heart.rawValue, Card.Suit.Spade.rawValue]

for count in 2...maxRank {
    for suit in aSuit{
        let aRank = Card.Rank.init(rawValue: count)
        let aSuit = Card.Suit.init(rawValue: suit)
        let myCard = Card(rank: aRank!,suit: aSuit!)
        myDeckOfCards.append(myCard)
    }
}
return myDeckOfCards
}
 var theDeck = generateDeckOfCards()

我的预期结果是将 selectedCard.image 设置为等于选择器 View 中当前选择的任何内容。

最佳答案

将您的 Card 结构更新为此(现在您可以获取图像名称):

struct Card {

    let rank: Rank
    let suit: Suit

    enum Rank: Int {
        case ace = 1, two, three, four, five, six, seven, eight, nine, ten
        case jack, queen, king
    }

    enum Suit: String {
        case diamond, heart, spade, club
    }

    var rankDescription: String {
        switch rank {
        case .ace:
            return "Ace"
        case .jack:
            return "Jack"
        case .queen:
            return "Queen"
        case .king:
            return "King"
        default:
            return String(rank.rawValue)
        }
    }

    var suitDescription: String {
        switch suit {
        case .diamond:
            return "♦️"
        case .heart:
            return "♥️"
        case .spade:
            return "♠️"
        case .club:
            return "♣️"
        }
    }


    // Image Name
    var imageName: String {
        return suit.rawValue + String(rank.rawValue)
    }


}

let card = Card(rank: .ace, suit: .diamond)
print(card.imageName) // prints "diamond1"

然后在选取器 View 的委托(delegate) didSelectRow 方法中,您可以将 selectedCard.image 设置为 UIPickerView 中当前选择的任何内容:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

     // Get card image
     let image = UIImage(named: "\(theDeck[row].imageName)")

     // Update image
     selectedCard.image = image

}

关于swift - 使用 PickerView 将卡片图片设置为其名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57174911/

相关文章:

swift - 我想要在 child 更改为 nil 时调用 FIRDataEventTypeChildChanged 而不是 ChildRemoved?

ios - swift 3 : UITabBarController change tab on unwind

ios - 自动缩小 UIButton 文本之前的换行符

ios - Storyboard启动检查的最佳实践

ios - 生成 P12 文件 Xcode?

ios - 将 UIImage 转换为 (NS)Data 会产生 nil?

ios - AVPlayer 断断续续的播放,只有在使用 AVMutableComposition 时才会出现不良的网络行为

ios - react-native 无法构建 ios : (error xcode Flipper) Typedef redefinition with different types ('uint8_t' (aka 'unsigned char' ) vs 'enum clockid_t' )

ios - IOS 新手,我手机上的应用程序与模拟器不同

Swift:dateFromString 的结果意外为 nil