UITableView, kolor separatora, gdzie ustawić?

162

Dodałem UITableVieww IB i ustawiłem „delegata” i „źródło danych” i wszystko działa dobrze. Następnie chciałem zmienić kolor separatora, ale jedynym sposobem, w jaki mogłem to zrobić, było dodanie metody do jednego z wywołań zwrotnych delegata. Czy jest lepsze miejsce, w którym powinienem to umieścić?

Nie mam tego w tej chwili, ale pomyślałem, że może muszę dodać „iVar” z mojego kontrolera, który mogę połączyć z UITableVieww IB, a następnie ustawić kolor separatora w viewDidload?

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView setSeparatorColor:[UIColor blackColor]];
    return 65;
}
fuzzygoat
źródło
Dodanie zmiennej i podłączenie jej do IB jest tym, jak zawsze to robiłem.
s1mm0t
To jest to o czym myślałem. Robiłem samouczek, którego nie używali i iVar, po prostu polegali na wywołaniach zwrotnych delegata i źródła danych. Jednak nigdy nie uzyskali dostępu do koloru separatora, więc może dlatego.
fuzzygoat

Odpowiedzi:

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

Mam nadzieję, że to pomoże - self.pamiętaj, aby uzyskać do niego dostęp.

Swift 4.2

tableView.separatorColor = UIColor.red
Helen
źródło
Cześć Helen, czy to daje dostęp do niego bez potrzeby dodawania @property, wygląda na to, że ma?
fuzzygoat
1
To prawda. Podklasujesz UITableViewController, który deklaruje ją jako właściwość. Dlatego dziedziczy metody akcesora / ustawiające z nadklasy, więc można ją odpowiednio ustawić. Nie możesz jednak uzyskać bezpośredniego dostępu do zmiennej instancji (prawdopodobnie dobrze). Powodem, dla którego można go ustawić w metodzie delegata, jest to, że jest to parametr wywoływanej metody.
Helen
2
Lub jeśli chcesz: self.tableView.separatorColor = UIColor.clearColor;
bbrame
2
Nie jest to szczególnie część odpowiedzi, ale dodanie [super viewDidLoad];do fragmentu kodu byłoby miłe.
totocaster
57

Teraz powinieneś móc to zrobić bezpośrednio w IB.

Nie jestem jednak pewien, czy było to dostępne, gdy pytanie zostało pierwotnie opublikowane.

wprowadź opis obrazu tutaj

Myxtic
źródło
24

Wersja Swift :

override func viewDidLoad() {
    super.viewDidLoad()

    // Assign your color to this property, for example here we assign the red color.
    tableView.separatorColor = UIColor.redColor()
}
King-Wizard
źródło
1
To pokazuje mi błąd 'separatorColor' is unavailablew systemie tvOS.
Banan
12

Wypróbuj + (instancetype) wygląd UITableView:

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

Uwaga: zmiana będzie dotyczyła wszystkich tabel używanych w aplikacji.

Nitesh Borad
źródło
3

Jeśli chcesz po prostu ustawić ten sam kolor dla każdego separatora i jest on nieprzezroczysty, możesz użyć:

 self.tableView.separatorColor = UIColor.redColor()

Jeśli chcesz użyć innych kolorów dla separatorów, wyczyść kolor separatora lub użyj koloru z alfa.

OSTROŻNIE: Musisz wiedzieć, że w separatorze znajduje się backgroundView, który ma domyślny kolor.

Aby to zmienić, możesz użyć tych funkcji:

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

Mam nadzieję, że to pomoże!

ezefire
źródło
1
To pokazuje mi błąd 'separatorColor' is unavailablew systemie tvOS.
Banan
3

Swift 3, xcode w wersji 8.3.2, storyboard-> wybierz tabelę Widok-> inspektor-> Separator.

Swift 3, xcode w wersji 8.3.2

Giang
źródło