Podłącz gniazdo prototypu komórki w storyboardzie

Jestem nowicjuszem w scenorysie, więc mam pewne trudności...

Stworzyłem TableViewController i chciałbym dostosować prototyp komórki. W prototypie komórki dodałem kilka etykiet, które chciałbym dostosować za pomocą mojej własnej klasy, która dziedziczy z UITableViewCell (AreaListCell). W Storyboardzie, dla prototypu komórki skonfigurowałem klasę niestandardową z "AreaListCell", a jej styl to"Custom".

In the storyboard, when I wybierz prototyp komórki, a następnie asystent wyświetli moją klasę, która implementuje UITableViewController (AreasTableViewController), a nie
moja klasa "AreaListCell".

Konsekwencją jest to, że mogę utworzyć outlet (używając Ctrl + Drag z etykiety prototypu komórki) do klasy AreasTableViewController, ale nie do klasy AreaListCell ! Jakiś pomysł jak połączyć prototyp komórki z moją klasą AreaListCell?

Dzięki za pomoc!

Author: sebastien, 2012-04-16

3 answers

Aktualizacja: począwszy od Xcode 4.6 (prawdopodobnie wcześniej) możesz teraz tworzyć gniazda przez przeciąganie sterowania! - Należy to zrobić do sekcji interfejsu lub rozszerzenia klasy (rozszerzenie klasy domyślnie nie istnieje dla nowych podklas komórek. Dzięki Steve 'owi Haley' owi za zwrócenie na to uwagi.

Nie można uzyskać Gniazdo automatycznie podłączone i utworzone przez przeciągnięcie do bloku kodu w edytorze asystenta, co jest słabe, ale można utworzyć gniazda ręcznie i podłączyć je następnie.

W interfejsie podklasy komórki:

@interface CustomCell : UITableViewCell

@property (nonatomic) IBOutlet UILabel* customLabel;

@end

Zsyntetyzować jak zwykle w implementacji.

W storyboardzie wybierz komórkę i przejdź do inspektora połączeń, zobaczysz nowe gniazdko. Przeciągnij stamtąd do odpowiedniego elementu w prototypie:

Tutaj wpisz opis obrazka

To może być teraz dostępne jako cell.customLabel w Twojej metodzie cellForRowAtIndexPath:.

 129
Author: jrturton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 12:19:27

Tak, nie możesz łączyć widoków znajdujących się wewnątrz niestandardowej komórki prototypu za pomocą metody ctrl+drag. Zamiast tego użyj właściwości tag widoku, a następnie podczas budowania komórki wyciągnij etykiety za pomocą ich znaczników.

Tutaj:

//Let's assume you have 3 labels.  One for a name, One for a count, One for a detail
//In your storyboard give the name label tag=1, count tag=2, and detail tag=3


- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *theCell = [tableView dequeueReusableCellWithIdentifier:@"Prototype Cell"];

    UILabel *nameLabel = (UILabel *)[theCell viewWithTag:1];
    UILabel *countLabel = (UILabel *)[theCell viewWithTag:2];
    UILabel *detailLabel = (UILabel *)[theCell viewWithTag:3];

    nameLabel.text = @"name";
    countLabel.text = @"count";
    detailLabel.text = @"details";

    return theCell;
}

Możesz również ustawić etykiety jako właściwości w niestandardowym kodzie komórki, a następnie po zainicjowaniu komórki użyj wywołania viewWithTag, aby przypisać właściwości etykiety do etykiet utworzonych na storyboardach.

Zajęło mi kilka dni, aby uświadomić sobie, że nie mogłem ctrl + przeciągnij z wnętrza niestandardowej komórki, aby utworzyć IBOutlet.

Powodzenia!

EDIT: możesz tworzyć Iboutlety dla swoich etykiet wewnątrz niestandardowej komórki i tworzyć linki programatticaly, tylko nie za pomocą metody ctrl+drag.

EDIT 2: całkowicie się myliłem, możesz ctrl + przeciągnąć. Zobacz drugą odpowiedź na to pytanie. Jest to trudne, ale działa całkiem dobrze.

 21
Author: Justin Paulson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-20 14:37:47

Swift 3

/ / używamy tego, jeśli Twoje obrazy są na serwerze.

/ / otrzymujemy obrazy z adresu url.

// możesz ustawić obraz z twojego Xcode.

  1. adres URL obrazów znajduje się w tablicy name = thumbnail czyli self.miniaturka [indexPath.wiersz]
  2. na UITableviewCell umieść imageView na komórce
  3. Wybierz UIimageView przypisz mu tag ze storyboard.

    let pictureURL = URL(string: self.thumbnail[indexPath.row])!
    let pictureData = NSData(contentsOf: pictureURL as URL)
    let catPicture = UIImage(data: pictureData as! Data)
    var imageV = UIImageView()
    imageV = cell?.viewWithTag(1) as! UIImageView
    imageV.image = catPicture
    
 0
Author: Ameer Chand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 11:51:27