Zastanawiam się, jak zmienić niebieski kolor podświetlenia / wyboru UITableViewCell
, jakieś pomysły?
Zastanawiam się, jak zmienić niebieski kolor podświetlenia / wyboru UITableViewCell
, jakieś pomysły?
Odpowiedzi:
Kolor podświetlenia można zmienić na kilka sposobów.
Zmień właściwość selectionStyle komórki. Jeśli zmienisz go na UITableViewCellSelectionStyleGray
, będzie szary.
Zmień selectedBackgroundView
właściwość. Właściwie to, co tworzy niebieski gradient, to widok. Możesz utworzyć widok i narysować, co chcesz, i użyć widoku jako tła komórek widoku tabeli.
selectedBackgroundView
wtedy po prostu nigdy się nie pojawi. Dopiero po ustawieniu „Selection” na Default, selectedBackgroundView
pokaże się. Testowane na iOS 6 i 7.
cell.selectedBackgroundView = [UIView new];
i ustawiasz dowolny kolor, który chcesz:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble już udzielił doskonałej odpowiedzi. Pomyślałem, że przydatne może być dołączenie krótkiego fragmentu kodu w celu dodania UIView
do komórki widoku tabeli, która będzie przedstawiać jako wybrany widok tła.
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
cell.selectedBackgroundView = selectionColor;
UITableViewCell
selectedBackgroundView
za UIView
który stworzyłem z moim wybranym kolorze tłaTo działało dobrze dla mnie. Dzięki za wskazówkę Zonble.
UITableViewCell
ma trzy domyślne style wyboru: -
Wdrożenie jest następujące: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
W Swift użyj tego w cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Jeśli chcesz, aby wybrany kolor był taki sam we wszystkich UITableViewCell
, użyj tego w AppDelegate
.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Jeśli chcesz zmienić to w całej aplikacji, możesz dodać logikę do delegata aplikacji
class AppDelegate: UIResponder, UIApplicationDelegate {
//... truncated
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
// set up your background color view
let colorView = UIView()
colorView.backgroundColor = UIColor.yellowColor()
// use UITableViewCell.appearance() to configure
// the default appearance of all UITableViewCells in your app
UITableViewCell.appearance().selectedBackgroundView = colorView
return true
}
//... truncated
}
dla kompletności: jeśli utworzyłeś własną podklasę UITableViewCell
, możesz zaimplementować - (void)setSelected:(BOOL)selected animated:(BOOL)animated
metodę i ustawić kolor tła niektórych widoków, które dodałeś w widoku zawartości. (jeśli tak jest) lub samego contentView (jeśli nie jest objęty jednym z Twoich własnych widoków.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected) {
self.contentView.backgroundColor = UIColor.blueColor;
} else {
self.contentView.backgroundColor = UIColor.whiteColor;
}
}
(nie użyłeś? aby dopasować małą szerokość kodu źródłowego DIV :)
To podejście ma dwie zalety w porównaniu z użyciem selectedBackgroundView, zużywa mniej pamięci i nieco mniej procesora, co nawet nie zauważysz, chyba że u wyświetlisz setki komórek.
selectedBackgroundView
Na samym początku metody addself. selectedBackgroundView = [UIView new];
selectedBackgroundView
właściwości.
Muszę ustawić styl wyboru na, UITableViewCellSelectionStyleDefault
aby niestandardowy kolor tła działał. Jeśli jakikolwiek inny styl, niestandardowy kolor tła zostanie zignorowany. Przetestowano na iOS 8.
Pełny kod komórki w następujący sposób:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// This is how you change the background color
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];
return cell;
}
Na podstawie odpowiedzi @ użytkownika możesz po prostu dodać to rozszerzenie w dowolnym miejscu kodu aplikacji i ustawić kolor wyboru bezpośrednio w edytorze scenorysów dla każdej komórki aplikacji:
@IBDesignable extension UITableViewCell {
@IBInspectable var selectedColor: UIColor? {
set {
if let color = newValue {
selectedBackgroundView = UIView()
selectedBackgroundView!.backgroundColor = color
} else {
selectedBackgroundView = nil
}
}
get {
return selectedBackgroundView?.backgroundColor
}
}
}
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
@IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
didSet {
selectedBackgroundView = UIView()
selectedBackgroundView?.backgroundColor = selectedColor
}
}
}
W swoim storyboardzie ustaw klasę swojego UITableViewCell na UIDesignableTableViewCell, w Inspektorze atrybutów możesz zmienić wybrany kolor komórki na dowolny kolor.
Możesz tego użyć do wszystkich swoich komórek. Tak będzie wyglądał Twój Inspektor atrybutów.
UIColor.clear
, nie UIColor.clearColor()
. Nie jestem pewien, czy to też zmiana w Swift, ale działa również bez @IBDesignable
.
Swift 3.0 / 4.0
Jeśli utworzyłeś własną niestandardową komórkę, możesz zmienić kolor zaznaczenia awakeFromNib()
dla wszystkich komórek:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}
UIView
do UI(Table)ViewController
bez dodawania go do hierarchii widoków, przeciągając go na pasek nad kontrolerem w programie Interface Designer. Następnie możesz wykonać powyższą sztuczkę, aby ustawić ją jako selectedBackgroundView
komórki.