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ń selectedBackgroundViewwł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.
selectedBackgroundViewwtedy po prostu nigdy się nie pojawi. Dopiero po ustawieniu „Selection” na Default, selectedBackgroundViewpokaż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 UIViewdo 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;
UITableViewCellselectedBackgroundViewza UIViewktó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)animatedmetodę 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];
selectedBackgroundViewwłaściwości.
Muszę ustawić styl wyboru na, UITableViewCellSelectionStyleDefaultaby 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
}
UIViewdo UI(Table)ViewControllerbez 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 selectedBackgroundViewkomórki.