Мені цікаво, як змінити синій колір підсвітки / виділення кольору UITableViewCell
, будь-які ідеї?
Мені цікаво, як змінити синій колір підсвітки / виділення кольору UITableViewCell
, будь-які ідеї?
Відповіді:
Можна змінити колір виділення кількома способами.
Змініть властивість selectStyle своєї комірки. Якщо змінити його UITableViewCellSelectionStyleGray
, воно стане сірим.
Змініть selectedBackgroundView
властивість. Насправді те, що створює синій градієнт, - це вид. Ви можете створити подання і намалювати все, що вам подобається, і використовувати подання як фон клітинок перегляду таблиці.
selectedBackgroundView
тоді просто звичайна ніколи не з’явиться. Лише після встановлення параметра "Вибір" за замовчуванням selectedBackgroundView
відображатиметься. Тестовано на iOS 6 та 7.
cell.selectedBackgroundView = [UIView new];
і встановлюєте потрібний колір:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble вже дав чудову відповідь. Я подумав, що може бути корисним включити короткий фрагмент коду для додавання UIView
до комірки tableview, який буде представлений як обраний фоновий вигляд.
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
такою, UIView
яку я створив із обраним кольором тлаЦе добре спрацювало для мене. Дякую за пораду Zonble.
UITableViewCell
має три стилі вибору за замовчуванням: -
Реалізація полягає в наступному:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
У Swift використовуйте це в cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Якщо ви хочете, щоб колір вибору був однаковим у всіх UITableViewCell
, використовуйте це в AppDelegate
.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Якщо ви хочете змінити це додаток на широкому рівні, ви можете додати логіку до свого делегата додатків
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
}
для повноти: якщо ви створили свій власний підклас, UITableViewCell
ви можете реалізувати - (void)setSelected:(BOOL)selected animated:(BOOL)animated
метод та встановити колір тла деякого перегляду, який ви додали у вікні вмісту. (якщо це так) або самого contentView (якщо він не охоплюється одним із ваших власних поглядів.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected) {
self.contentView.backgroundColor = UIColor.blueColor;
} else {
self.contentView.backgroundColor = UIColor.whiteColor;
}
}
(не використовували?, щоб відповідати невеликій ширині вихідного коду DIV's :)
Цей підхід має дві переваги перед використанням selectedBackgroundView, він використовує менше пам'яті та трохи менше процесора, не те, що ви навіть помітите, якщо ви не відображатимете сотні комірок.
selectedBackgroundView
самому початку методу надбудовиself. selectedBackgroundView = [UIView new];
selectedBackgroundView
властивості.
Я повинен встановити стиль вибору, щоб UITableViewCellSelectionStyleDefault
користувальницький колір фону працював. Якщо будь-який інший стиль, нестандартний колір фону буде проігноровано. Тестовано на iOS 8.
Повний код для комірки наступний:
- (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;
}
Виходячи з відповіді користувача @ користувача , ви можете просто додати це розширення в будь-якому місці коду програми та мати колір вибору безпосередньо в редакторі раскадрівки для всіх комірок вашої програми:
@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
}
}
}
У своїй дошці розкадровки встановіть клас вашого UITableViewCell на UIDesignableTableViewCell в інспекторі атрибутів, ви можете змінити вибраний колір вашої комірки на будь-який колір.
Ви можете використовувати це для всіх своїх клітин. Ось так виглядатиме ваш інспектор з атрибутів.
UIColor.clear
, ні UIColor.clearColor()
. Не впевнений, що це і зміни Swift, але це також працює без цього @IBDesignable
.
Швидкий 3.0 / 4.0
Якщо ви створили власну власну клітинку, ви можете змінити колір вибору awakeFromNib()
для всіх комірок:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}