UITableView, Separator color onde definir?

162

Eu adicionei um UITableViewno IB e defina o "delegado" e "fonte de dados" e tudo está funcionando bem. O que eu queria fazer em seguida foi alterar a cor do separador, mas a única maneira de encontrar isso foi adicionar o método a um dos retornos de chamada delegados. Existe um lugar melhor para colocar isso?

Eu não tenho isso no momento, mas eu estava pensando que talvez eu precise adicionar um "iVar" do meu controlador para poder vincular ao UITableViewIB e depois definir a cor do separador no viewDidload?

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView setSeparatorColor:[UIColor blackColor]];
    return 65;
}
fuzzygoat
fonte
Adicionar a variável e conectá-la ao IB é como sempre fiz isso.
s1mm0t
Isso é o que eu estava pensando. Eu estava fazendo um tutorial que eles não usavam e o iVar, eles apenas contavam com os retornos de chamada do delegado e da fonte de dados. No entanto, eles nunca acessaram a cor do separador, talvez por isso.
Fuzzygoat 29/07/10

Respostas:

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

Espero que ajude - você precisará self.acessá-lo, lembre-se.

Swift 4.2

tableView.separatorColor = UIColor.red
Helen
fonte
Olá Helen, isso é possível acessá-lo sem a necessidade de adicionar uma propriedade @, parece que sim?
Fuzzygoat 29/07
1
Isso é verdade. Você está subclassificando UITableViewController, que o declara como uma propriedade. Portanto, ele herda os métodos de acessador / configurador da superclasse, para que você possa configurá-lo adequadamente. No entanto, você não pode acessar a variável de instância diretamente (provavelmente uma coisa boa). A razão pela qual você pode configurá-lo em um método delegado é porque é um parâmetro para o método chamado.
289 Helen
2
Ou se você gosta: self.tableView.separatorColor = UIColor.clearColor;
precisa saber é
2
Não é particularmente parte da resposta, mas [super viewDidLoad];seria bom adicionar ao snippet de código.
totocaster
57

Agora você deve conseguir fazer isso diretamente no IB.

Não tenho certeza, porém, se isso estava disponível quando a pergunta foi postada originalmente.

insira a descrição da imagem aqui

Myxtic
fonte
24

Versão rápida :

override func viewDidLoad() {
    super.viewDidLoad()

    // Assign your color to this property, for example here we assign the red color.
    tableView.separatorColor = UIColor.redColor()
}
O rei da bruxaria
fonte
1
Isso me mostra um erro 'separatorColor' is unavailableno tvOS.
Banana
12

Experimente + a aparência (tipo de instância) do UITableView:

Objetivo-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"

Nota: A alteração será refletida em todas as tabelas usadas no aplicativo.

Nitesh Borad
fonte
3

Se você quiser definir a mesma cor para cada separador e for opaco, use:

 self.tableView.separatorColor = UIColor.redColor()

Se você deseja usar cores diferentes para os separadores, limpe a cor do separador ou use uma cor com alfa.

CUIDADO: Você deve saber que existe um backgroundView no separador que possui uma cor padrão.

Para alterá-lo, você pode usar estas funções:

    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
        }
    }

Espero que ajude!

ezefire
fonte
1
Isso me mostra um erro 'separatorColor' is unavailableno tvOS.
Banana
3

Swift 3, xcode versão 8.3.2, storyboard-> escolha sua tabela Exibir-> inspetor-> Separador.

Swift 3, xcode versão 8.3.2

Giang
fonte