2017-02-22 1 views
0

ich eine UITableView erstellt und dies ist mein Code dafür:Benutzerdefinierte UITableViewCell mit null UIImageView

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    // let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "SubjectCell") 

    let cell = SubjectCell(style: UITableViewCellStyle.default, reuseIdentifier: "SubjectCell") 

    cell.cellUIImage.image = UIImage(named: "menu.png") 

    // cell.cellUIImage = UIImageView(UIImage(named: "menu-32.png")) 

    if indexPath.row % 2 == 0{ 
     cell.backgroundColor = UIColor.cyan 
    } 

    return cell 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 5 
} 

Und meine SubjectCell Klasse ist die folgende:

import Foundation 
import UIKit 

class SubjectCell : UITableViewCell{ 
    @IBOutlet var cellUIImage: UIImageView! 
} 

Allerdings, wenn ich diesen Code ausführen, es stürzt ab. Debugging, bemerkte ich, dass cellUIImage ist Null, so dass es abstürzt, wenn es es auspackt. Die IBOulet ist mit meiner Prototypzelle verbunden.

linked UIImageView

Das Abwickeln Sache wird von Xcode gemacht, und es sollte nicht Null sein, weil es ist eigentlich eine Zelle UIImageView.

+0

Warum entpacken Sie die Zelle nicht ordnungsgemäß aus der Tabellenansicht? – rmaddy

+0

@rpaddy kein Grund besonders. Dies ist ein wirklich primitiver Code, ich schneiere ihn normalerweise danach ... aber ich falle das ist nicht der Grund warum er zusammenbricht. –

+2

Es ist genau der Grund, warum es versagt. Dein Code erstellt keine Zelle aus deinem XIB/Storyboard. Sie erstellen Ihre Zelle nur aus Code. Daher ist keiner der Ausgänge der Zelle eingerichtet. Erstellen Sie Ihre Zelle richtig. Registrieren Sie die Zellklasse/-feder ordnungsgemäß und es wird wie erwartet funktionieren. – rmaddy

Antwort

-2

Seit der Veröffentlichung des iOS-Storyboardentwurfs müssen Sie die UITableViewCell nicht mehr ableiten, um Ihre benutzerdefinierte Zelle zu erstellen.

Wählen Sie in Ihrem Storyboard die Prototypzelle aus, geben Sie der benutzerdefinierten Zelle auf der Registerkarte "Attribute" eine identifier (zum Beispiel: "YourCellIdentifier").

Als nächstes (noch im Storyboard) wählen Sie die UIImageView, die Sie an die benutzerdefinierten Zelle hinzugefügt, gibt ihm eine Tag-Nummer (zum Beispiel: 1000)

nun diesen Code zu cellForRowAt Methode hinzufügen:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"YourCellIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    // Here is your desired image view. 
    UIImageView *yourImageView = [cell viewWithTag:1000]; 

    return cell; 
} 
Verwandte Themen