34

開示標識アクセサリを使用して設定できることは知っていますが、 を使用UIImageViewせずに開示標識の色だけを変更したいですUIImageView

それは可能か不可能か? 可能であれば、どのように?

4

6 に答える 6

43

独自の開示インジケーターを追加します。

cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory.png"]];
于 2013-10-21T11:03:06.963 に答える
3

申し訳ありませんが、私はパーティーに非常に遅れていますが、今日これに苦労していて、ちょうどそれを理解しました (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
            }
        }  
    }
}
于 2015-10-20T20:18:38.003 に答える
1

上で指摘したように、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
于 2015-03-03T16:02:54.203 に答える