UIView свойства по умолчанию и пользовательские свойства - PullRequest
0 голосов
/ 16 октября 2018

Я создал UIView со свойствами по умолчанию

var color =  Label.Color.black { didSet{ setNeedsDisplay() }}
var count =  Label.Count.one.rawValue   { didSet{ setNeedsDisplay() }}
var shading =  Label.Shading.empty   { didSet{ setNeedsDisplay() }}
var shape =  Label.Shape.triangle { didSet{ setNeedsDisplay() }}
var isSelected = false

И затем я добавляю несколько подпредставлений, используя тот же UIView в ViewController

func addCardsOnGridView() {
    grid.frame = cardsView.bounds
    grid.cellCount = game.cardsOnDeck.count
    for cardView in cardsView.subviews{

        cardView.removeFromSuperview()
    }
    for index in 0..<grid.cellCount {
        if let cellFrame = grid[index] {
            let card = game.cardsOnDeck[index]
            let cardView = CardsView(frame: cellFrame.insetBy(dx: CardSize.inset, dy: CardSize.inset))
            cardView.color = card.label.color
            cardView.count = card.label.count.rawValue
            cardView.shape = card.label.shape
            cardView.shading = card.label.shading
            //cardView.isSelected = card.isSelected
            //print(cardsView.isSelected)
            cardsView.addSubview(cardView)

        } else {
            print("grid[\(index)] doecnt exist")
        }
    }
}

, а затем я получаю этот UIView со значением по умолчанию, который появляется как superviewи подпредставления над суперпредставлением:

UIView with default comes as superview and subviews above superview

Как удалить представление со стандартными свойствами UIView и перерисовать с пользовательскими свойствами?

1 Ответ

0 голосов
/ 19 октября 2018

Я не могу полностью понять ваш вопрос.Я понимаю, что вы хотите получить конкретный вид, например, вид треугольника.

Одним из способов достижения этого является назначение tag каждому подпредставлению, как показано ниже, когда вы добавляете их в mainView

aView.tag = 6

, а затем, когда вы хотите получить подпредставление, вы можетеиспользовать функцию viewWithTag, как показано ниже

if let aCustomView = mainView.viewWithTag(6) as? CustomView {
   aCustomView.myColor = .blue
}

Другой способ получить пользовательское представление - зациклить мысленное подпредставление и попытаться преобразовать представление в пользовательский класс, как показано ниже

mainView.subviews.forEach({ (aView) in
  if aView.tag == 6,
     let customView = aView as? CustomView {
        customView.myColor = .blue
  }
}) 
...