開示標識アクセサリを使用して設定できることは知っていますが、 を使用UIImageView
せずに開示標識の色だけを変更したいですUIImageView
。
それは可能か不可能か? 可能であれば、どのように?
開示標識アクセサリを使用して設定できることは知っていますが、 を使用UIImageView
せずに開示標識の色だけを変更したいですUIImageView
。
それは可能か不可能か? 可能であれば、どのように?
独自の開示インジケーターを追加します。
cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory.png"]];
申し訳ありませんが、私はパーティーに非常に遅れていますが、今日これに苦労していて、ちょうどそれを理解しました (iOS8 と 9)。View Debugger を使用すると、Disclosure 三角形が UIImageView の UIImage であり、UIButton であることが明らかになりました。
そのため、-awakeFromNib では、サブビューを反復処理してボタンを見つけていました。ボタンが見つかったら、元の画像への参照を -backgroundImageForState 経由で取得できます。
元の画像を取得したら、[originalImage imageWithRenderingMode:AlwaysTemplate] を呼び出してテンプレート画像のコピーを作成できます。
次に、使用可能なすべての状態の backgroundImage を設定できます。これを行うと、画像は自動的に色合いを拾います。
以下は、いくつかの迅速なサンプルコードです。
class GratuitousDisclosureTableViewCell: UITableViewCell {
private weak var disclosureButton: UIButton? {
didSet {
if let originalImage = self.disclosureButton?.backgroundImageForState(.Normal) {
let templateImage = originalImage.imageWithRenderingMode(.AlwaysTemplate)
self.disclosureButton?.setBackgroundImage(templateImage, forState: .Normal)
self.disclosureButton?.setBackgroundImage(templateImage, forState: .Highlighted)
self.disclosureButton?.setBackgroundImage(templateImage, forState: .Disabled)
self.disclosureButton?.setBackgroundImage(templateImage, forState: .Selected)
self.disclosureButton?.setBackgroundImage(templateImage, forState: .Application)
self.disclosureButton?.setBackgroundImage(templateImage, forState: .Reserved)
}
}
}
override func awakeFromNib() {
super.awakeFromNib()
for view in self.subviews {
if let button = view as? UIButton {
self.disclosureButton = button
break
}
}
}
}
上で指摘したように、accessoryView を変更する 1 つの方法は、独自の UIImageView を追加することです。ただし、実際には、UIView から派生した任意のオブジェクトを提供できます。次に、UIImageView の代わりにアイコン フォント (例: icomoon) を持つ UILabel を使用することをお勧めします。UILabel とアイコン フォントにより、画像、色、サイズの両方を柔軟に調整できます。
let font = UIFont(name: "icomoon", size: 16.0)
let icon = "\u{e60f}"
let lbl = UILabel(frame: CGRectMake(0, 0, 20, 20))
lbl.font = font
lbl.text = icon
cell.accessoryView = lbl