2016-09-09 15 views
0

PaintCodeを使用していくつかの画像をUITableViewCellに追加し、PaintCode画像(UIViewに描画される)が確実に画面に表示されません。UITableViewCell内のUIViewの描画が表示されない

3つの水平スタックビューを含む水平スタックビューがあります。その一部はモデルによって隠されている場合があります。内部スタックビューの1つが潜在的にhidden=YESに設定されている場合、そのスタックビュー内のUIViewは、ビューが存在し、スタックビューに余裕があっても常に表示されるとは限りません。

それはおそらくあなたを表示する方が簡単です:

xcode view inspector

あなたはビュー階層インスペクタのスクリーンショットで見ることができるように、そこに部屋が栗色の六角形のために次の4にあるが、それは表示されません。アップ。私がセルを選択すると、セルが強調表示されている間は常に六角形が表示され、新しいビューコントローラをスタックにプッシュしてポップすると、六角形が残ることがあります(下のセルのように)。しかし、テーブルビューの初期ロード時には、ほとんどの場合、六角形は欠落しています。 .hiddenプロパティはUIView自体に直接アクセスすることはなく、含まれるのはUIStackViewです。これは、ほとんどないよう

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

CardCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CardCustomCell"]; 

if (cell == nil) { 
    cell = [[CardCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CardCustomCell"]; 
} 

[cell cellCard:self.rowArray[indexPath.section][indexPath.row]]; 
cell.cellButton.hidden = YES; 

return cell; 

}

- (void)cellCard:(Card *)card { 

if ([[BlackListSingleton theBlackList] cardExists:card]) { 
    [self setBadge:1]; 
} else if ([[WhiteListSingleton theWhiteList] cardExists:card]) { 
    [self setBadge:2]; 
} else { 
    [self setBadge:0]; 
} 

self.typeLabel.text = [Card stringForCardType:card.cardType]; 
self.nameLabel.text = card.cardName; 

if (card.coinCost) { 
    self.coinStack.hidden = NO; 
    self.coinCost.text = card.coinCost; 
} else { 
    self.coinStack.hidden = YES; 
} 
if (card.potionCost) { 
    self.potionStack.hidden = NO; 
    self.potionCost.text = card.potionCost; 
} else { 
    self.potionStack.hidden = YES; 
} 
if (card.debtCost) { 
    self.debtStack.hidden = NO; 
    self.debtCost.text = card.debtCost; 
} else { 
    self.debtStack.hidden = YES; 
} 

[self cardTypeImage:card.cardType]; 

}

+0

に乗る方法を知ってみましょうあなたはこれを解決するために管理しましたホキ – Tom

+0

@トム悲しいことに、いいえ(それは私が維持している別のアプリでも頭を養っていました)結局のところ、実際のP​​NGのコード描画された画像を切り捨てなければならなかったのです – hokiewalrus

+0

私はoこのコメントを投稿してから数時間後にこれを手に入れてください。あなたがまだ興味があるのであれば、私が次のPCにいるときにコードをあなたと共有します。 – Tom

答えて

0

OK:

はUITabelViewCellをロード制御するためのコードは以下である(debtStackは、当該六角形を含む)のエレガントなソリューション。描画メソッドを配列に追加し、必要に応じて呼び出すことでこの回答を改善できますが、これは私がこの問題をどのように解決したかについての最初の繰り返しです。

最初に、ストーリーボードにプロトタイプセルを作成し、uitableviewcell/collectionviewcellをサブクラス化して、IDインスペクタでクラスを追加することを忘れないようにしてください。

私のUITableViewCellのサブクラスは、私はUIViewのサブクラスは、次のようになり、プロトタイプセルにビューを追加UIViewのサブクラスを作成し、アイデンティティインスペクタで再び

をするクラスを設定し、この

import UIKit 

class CategoriesTableViewCell: UITableViewCell { 

    @IBOutlet weak var categoryImage: UIImageView! 

    @IBOutlet weak var categoryView: DesignIconView! 
    @IBOutlet weak var subtitleLabel: UILabel! 
    @IBOutlet weak var titleLabel: UILabel! 

    let cView = DesignIconView() 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 


    } 
    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

    func configure(forRow row : Int, title : String, subTitle: String){ 

     cView.drawForRow = row 
     cView.frame = CGRect(x: 0, y: 0, width: categoryView.frame.width, height: categoryView.frame.height) 
     cView.backgroundColor = UIColor.clear 
     categoryView.addSubview(cView) 

     titleLabel.text = title 
     subtitleLabel.text = subTitle 

    } 



} 

次のようになります。また、描画メソッドを配列に追加することで、これを簡単に改善できますが、簡単にするためswitchステートメントを使います。

import UIKit 

class DesignIconView: UIView { 

    private var _drawForRow : Int! 

    var drawForRow: Int! { 
     set { 

      _drawForRow = newValue 
     } get { 

      if _drawForRow == nil { 
       _drawForRow = 0 
      } 
      return _drawForRow 
     } 
    } 

    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     // Drawing code 

     guard _drawForRow != nil else { 
      return _drawForRow = 0 
     } 
     // marketing, business, lifestyle, music, tech, video, design 
     switch _drawForRow { 
     case 0: 
      CategoryIcons.drawMarketingIcon(frame: self.bounds, resizing: .aspectFit) 
     case 1: 
      CategoryIcons.drawBusinessIcon(frame: self.bounds, resizing: .aspectFit) 
     case 2: 
      CategoryIcons.drawLifeStyleIcon(frame: self.bounds, resizing: .aspectFit) 
     case 3: 
      CategoryIcons.drawMusicIcon(frame: self.bounds, resizing: .aspectFit) 
     case 4: 
      CategoryIcons.drawTechIcon(frame: self.bounds, resizing: .aspectFit) 
     case 5: 
      CategoryIcons.drawVideoIcon(frame: self.bounds, resizing: .aspectFit) 
     case 6: 
      CategoryIcons.drawDesignIcon(frame: self.bounds, resizing: .aspectFit) 


     default: 
      CategoryIcons.drawMusicIcon(frame: self.bounds, resizing: .aspectFit) 

     } 




     print("Drawing icon") 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

} 

そして最後に

func configureCategoriesCells(cell: CategoriesTableViewCell, indexPath : IndexPath) { 

    let categoryLabels = ["A", "B", "C", "D", "E", "F", "G"] 
    let subCategoryLabels = ["subtitle","subtitle","subtitle,"subtitle", "subtitle", "subtitle"] 

    cell.configure(forRow: indexPath.row, title: categoryLabels[indexPath.row], subTitle: subCategoryLabels[indexPath.row]) 
} 

私のViewControllerに結果が必要とされるアイコンが描かれている:)

私はあなたが

関連する問題