我有一个 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/