Mam tableview
, gdzie czasami może nie być żadnych wyników do wyświetlenia, więc chciałbym umieścić coś, co mówi „brak wyników”, jeśli nie ma żadnych wyników (etykieta lub jedna komórka widoku tabeli?).
Czy jest na to najłatwiejszy sposób?
Spróbowałbym z label
tyłu, a tableview
następnie ukrył jeden z dwóch w oparciu o wyniki, ale ponieważ pracuję z TableViewController
a nie normalnym, ViewController
nie jestem pewien, jak to jest inteligentne lub wykonalne.
Używam również Parse
i podklasy jako PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
Mogę podać dodatkowe informacje, po prostu daj mi znać!
TableViewController
Scena w Storyboard:
EDYCJA: Per Midhun MP, oto kod, którego używam
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSInteger numOfSections = 0;
if ([self.stringArray count] > 0)
{
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
numOfSections = 1;
//yourTableView.backgroundView = nil;
self.tableView.backgroundView = nil;
}
else
{
UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height)];
noDataLabel.text = @"No data available";
noDataLabel.textColor = [UIColor blackColor];
noDataLabel.textAlignment = NSTextAlignmentCenter;
//yourTableView.backgroundView = noDataLabel;
//yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundView = noDataLabel;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return numOfSections;
}
A oto widok, który otrzymuję, wciąż ma linie separatora. Mam wrażenie, że to mała zmiana, ale nie jestem pewien, dlaczego pojawiają się linie separatora?
numberOfSections
powinien zwrócić liczbę i to wszystko. To samo dotyczynumberOfRowsInSection
. Można je wywoływać wielokrotnie w dowolnym momencie. Nigdy nie aktualizuj widoków, nie aktualizuj danych ani nie rób niczego poza zwracaniem liczby. Logika aktualizowania widoków nigdy nie może znajdować się w tych metodach.Odpowiedzi:
Możesz to łatwo osiągnąć za pomocą
backgroundView
właściwościUITableView
.Cel C:
Szybki:
Odwołanie do klasy UITableView
źródło
tableView
gniazdka, żebym mógł to zrobićyourTableView.backgroundView
? UżywamTableViewController
więc teraz nie mam dla niego gniazdka, dlatego się zastanawiam.UITableViewController
ma już właściwość o nazwie,tableView
więc nie musisz jej tworzyćself.tableView
numberOfSections
powinien zwrócić liczbę i to wszystko. To samo dotyczynumberOfRowsInSection
. Można je wywoływać wielokrotnie w dowolnym momencie. Nigdy nie aktualizuj widoków, nie aktualizuj danych ani nie rób niczego poza zwracaniem liczby. Logika aktualizowania widoków nigdy nie może znajdować się w tych metodach.W przypadku Xcode 8.3.2 - Swift 3.1
Oto niezbyt dobrze znany, ale niewiarygodnie łatwy sposób na dodanie widoku „Brak elementów” do widoku pustej tabeli, który powraca do Xcode 7. Zostawię ci kontrolę nad logiką, która dodaje / usuwa widok do widoku tła tabeli, ale tutaj jest przepływ dla i scenorysu Xcode (8.3.2):
Ostatecznie działa to zawsze, gdy chcesz dodać prosty widok do kontrolera widoku, który niekoniecznie chcesz, aby był wyświetlany natychmiast, ale także nie chcesz ręcznie kodować.
źródło
Szybka wersja powyższego kodu: -
Ale jeśli ładujesz informacje z JSON, musisz sprawdzić, czy JSON jest pusty, czy nie, dlatego jeśli umieścisz kod w ten sposób, początkowo wyświetli się komunikat „Brak danych”, a następnie zniknie. Ponieważ po przeładowaniu tabeli dane wiadomość się ukrywa. Możesz więc umieścić ten kod w miejscu ładowania danych JSON do tablicy. WIĘC :-
źródło
self.tableView.reloadData()
są wywoływane? Odkryłem, że dodaje moje nowe wiersze, alenoDataLabel
nadal jest wyświetlany pod nimi.self.tableView.backgroundView = nil
instrukcji my if przedreturn jobs_list.count
działa dobrze. dziękinumberOfSections
powinien zwrócić liczbę i to wszystko. To samo dotyczynumberOfRowsInSection
. Można je wywoływać wielokrotnie w dowolnym momencie. Nigdy nie aktualizuj widoków, nie aktualizuj danych ani nie rób niczego poza zwracaniem liczby. Logika aktualizowania widoków nigdy nie może znajdować się w tych metodach.Możesz wypróbować tę kontrolę. Jest całkiem schludny. DZNEmptyDataSet
Albo na twoim miejscu wszystko co bym zrobił
Bułka z masłem
źródło
Swift 3 (zaktualizowany):
źródło
numberOfSections
powinien zwrócić liczbę i to wszystko. To samo dotyczynumberOfRowsInSection
. Można je wywoływać wielokrotnie w dowolnym momencie. Nigdy nie aktualizuj widoków, nie aktualizuj danych ani nie rób niczego poza zwracaniem liczby. Logika aktualizowania widoków nigdy nie może znajdować się w tych metodach.Swift3.0
Mam nadzieję, że serwer służy do Twojego celu ...... W Twoim UITableViewController.
Klasa pomocnicza z funkcją:
źródło
numberOfSections
powinien zwrócić liczbę i to wszystko. To samo dotyczynumberOfRowsInSection
. Można je wywoływać wielokrotnie w dowolnym momencie. Nigdy nie aktualizuj widoków, nie aktualizuj danych ani nie rób niczego poza zwracaniem liczby. Logika aktualizowania widoków nigdy nie może znajdować się w tych metodach.Myślę, że najbardziej eleganckim sposobem rozwiązania twojego problemu jest przejście z a
UITableViewController
doUIViewController
zawierającegoUITableView
. W ten sposób możesz dodać cokolwiekUIView
chcesz jako podglądy głównego widoku.Nie polecałbym używania UITableViewCell, aby to zrobić, może być konieczne dodanie dodatkowych rzeczy w przyszłości, a rzeczy mogą szybko stać się brzydkie.
Możesz też zrobić coś takiego, ale to też nie jest najlepsze rozwiązanie.
źródło
UIViewController
zawierającegoUITableView
.UITableViewController
siebie, ponieważ używanie go nie jest tak naprawdę łatwiejsze niż robienie tego w inny sposób, ale ogranicza to twoją zdolność do zmiany rzeczy w przyszłości.Użyj tego kodu w swojej
numberOfSectionsInTableView
metodzie: -źródło
numberOfSections
powinien zwrócić liczbę i to wszystko. To samo dotyczynumberOfRowsInSection
. Można je wywoływać wielokrotnie w dowolnym momencie. Nigdy nie aktualizuj widoków, nie aktualizuj danych ani nie rób niczego poza zwracaniem liczby. Logika aktualizowania widoków nigdy nie może znajdować się w tych metodach.SWIFT 3
źródło
Jeśli nie używasz stopki widoku tabeli i nie chcesz, aby widok tabeli wypełniał ekran pustymi domyślnymi komórkami tabeli, sugerowałbym ustawienie stopki widoku tabeli na puste UIView. Nie znam poprawnej składni do zrobienia tego w obj-c lub Swift, ale w Xamarin.iOS zrobiłbym to tak:
Powyższy kod spowoduje wyświetlenie tabeli bez pustych komórek
źródło
Oto rozwiązanie, które zadziałało dla mnie.
Dodaj następujący kod do nowego pliku.
Zmień klasę tabeli na klasę niestandardową „MyTableView” z serii ujęć lub .xib
(zadziała to tylko dla pierwszej sekcji. Jeśli chcesz dostosować więcej, wprowadź zmiany w funkcji MyTableView reloadData () odpowiednio dla innych sekcji)
źródło
@IBInspectable var emptyStateText: String?
i zaznacz tę klasę, ponieważ@IBDesignable
wtedy będziesz mógł zmieniać różne puste teksty stanu dla różnych scen w scenorysie lub xibs. Cieszyć się! :)Przedstawiłbym widok nakładki, który ma wygląd i wiadomość, którą chcesz, jeśli widok tabeli nie daje wyników. Możesz to zrobić w ViewDidAppear, więc masz wyniki przed pokazaniem / niewidocznością widoku.
źródło
Jeśli chcesz to zrobić bez żadnego kodu, spróbuj tego!
Kliknij swój tableView.
Zmień styl z „zwykły” na „zgrupowany”.
Teraz, kiedy używasz ....
tableView.backgroundView = WSTAW SWOJĄ ETYKIETĘ LUB WIDOK
Nie pokaże separatorów!
źródło
Dodaj ten kod w jednym pliku i zmień typ kolekcji na CustomCollectionView
źródło