Zastanawiam się, jak zmienić niebieski kolor podświetlenia / wyboru UITableViewCell
, jakieś pomysły?
ios
uitableview
Thomas Joos
źródło
źródło
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
zaUIView
który stworzyłem z moim wybranym kolorze tłaTo działało dobrze dla mnie. Dzięki za wskazówkę Zonble.
źródło
UITableViewCell
ma trzy domyślne style wyboru: -Wdrożenie jest następujące: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; }
źródło
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 wAppDelegate
.let selectedView = UIView() selectedView.backgroundColor = .white UITableViewCell.appearance().selectedBackgroundView = selectedView
źródło
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 }
źródło
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.
źródło
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; }
źródło
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 } } }
źródło
@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.
źródło
UIColor.clear
, nieUIColor.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 }
źródło
1- Dodaj widok do widoku zawartości swojej komórki.
2- Kliknij prawym przyciskiem komórkę.
3- Ustaw dodany widok jako „selectedBackgroundView”
źródło
UIView
doUI(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ą jakoselectedBackgroundView
komórki.