UITableView, разделитель цвета где установить?

162

Я добавил UITableViewв IB и установил «делегат» и «источник данных», и все работает хорошо. Далее я хотел изменить цвет разделителя, но единственный способ найти способ сделать это - добавить метод к одному из обратных вызовов делегата. Есть ли лучшее место, где я должен поместить это?

У меня нет этого в данный момент, но я думал, что, возможно, мне нужно добавить «iVar» из моего контроллера, который я могу связать с UITableViewв IB, а затем установить цвет разделителя в viewDidload?

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView setSeparatorColor:[UIColor blackColor]];
    return 65;
}
fuzzygoat
источник
Добавив переменную и подключив ее в IB, я всегда так делал.
s1mm0t
Вот о чем я думал. Я делал урок, который они не использовали, и iVar, они просто полагались на обратные вызовы делегата и источника данных. Однако они никогда не обращались к цвету разделителя, так что, может быть, поэтому.
fuzzygoat

Ответы:

335
- (void)viewDidLoad
{
   [self.tableView setSeparatorColor:[UIColor myColor]];
}

Надеюсь, это поможет - вам понадобится self.доступ к нему, помните.

Swift 4.2

tableView.separatorColor = UIColor.red
Хелен
источник
Привет Хелен, это доступ к нему без необходимости добавлять @property, похоже, что делает?
fuzzygoat
1
Это верно. Вы создаете подкласс UITableViewController, который объявляет его как свойство. Поэтому он наследует методы доступа / сеттера суперкласса, так что вы можете установить его соответствующим образом. Однако вы не можете получить доступ к переменной экземпляра напрямую (вероятно, это хорошо). Причина, по которой вы можете установить его в методе делегата, заключается в том, что это параметр вызываемого метода.
Хелен
2
Или, если вам нравится: self.tableView.separatorColor = UIColor.clearColor;
bbrame
2
Не особенно часть ответа, но [super viewDidLoad];было бы неплохо добавить фрагмент кода.
totocaster
57

Теперь вы должны быть в состоянии сделать это непосредственно в IB.

Не уверен, однако, если это было доступно, когда вопрос был опубликован изначально.

введите описание изображения здесь

Myxtic
источник
24

Swift версия:

override func viewDidLoad() {
    super.viewDidLoad()

    // Assign your color to this property, for example here we assign the red color.
    tableView.separatorColor = UIColor.redColor()
}
Король-Мастер
источник
1
Это показывает мне ошибку 'separatorColor' is unavailableна TVOS.
Банан
12

Попробуйте + (instancetype) внешний вид UITableView:

Objective-C:

[[UITableView appearance] setSeparatorColor:[UIColor blackColor]]; // set your desired colour in place of "[UIColor blackColor]"

Swift 3.0:

UITableView.appearance().separatorColor = UIColor.black // set your desired colour in place of "UIColor.black"

Примечание. Изменения будут отражены для всех таблиц, используемых в приложении.

Нитеш Борад
источник
3

Если вы просто хотите установить одинаковый цвет для каждого разделителя, и он непрозрачен, вы можете использовать:

 self.tableView.separatorColor = UIColor.redColor()

Если вы хотите использовать разные цвета для разделителей или очистить цвет разделителя или использовать цвет с альфа-каналом.

БУДЬТЕ ОСТОРОЖНЫ: Вы должны знать, что в разделителе есть backgroundView, который имеет цвет по умолчанию.

Чтобы изменить его, вы можете использовать следующие функции:

    func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        if(view.isKindOfClass(UITableViewHeaderFooterView)){
            var headerView = view as! UITableViewHeaderFooterView;
            headerView.backgroundView?.backgroundColor = myColor

           //Other colors you can change here
           // headerView.backgroundColor = myColor
           // headerView.contentView.backgroundColor = myColor
        }
    }

    func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
        if(view.isKindOfClass(UITableViewHeaderFooterView)){
            var footerView = view as! UITableViewHeaderFooterView;
            footerView.backgroundView?.backgroundColor = myColor
           //Other colors you can change here
           //footerView.backgroundColor = myColor
           //footerView.contentView.backgroundColor = myColor
        }
    }

Надеюсь, поможет!

ezefire
источник
1
Это показывает мне ошибку 'separatorColor' is unavailableна TVOS.
Банан
3

Swift 3, xcode version 8.3.2, раскадровка -> выберите таблицу View-> inspector-> Separator.

Swift 3, версия xcode 8.3.2

Жанг
источник