wake-up-neo.com

iOS: Wie kann man wiederverwendbare 'Default'-Zellen ausreißen, ohne wirklich eine Zelle im Storyboard zu haben?

Ich habe mehrere Tabellen, die Standardzellen wie die mit Titel oder die mit Symbol links und Titel rechts. 

Ich möchte diese Zellen nicht im Storyboard hinzufügen und ihnen eine Kennung zuweisen. Kann ich das tun? 

es muss wiederverwendbar sein, ich weiß, wie neue nicht wiederverwendbare Zellen zugewiesen werden

Ich habe die Antworten unten ausprobiert, 

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];

sollte richtig sein, aber es ist sehr langweilig und leicht zu vergessen

UITableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
   cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

Das obige ist vielleicht besser, da es alle Codes an einer Stelle platziert, aber wenn ich dequeueReusableCellWithIdentifier: forIndexPath: (mit indexPath) versuche, stürzt es ab. 

  1. warum stürzt dequeueReusableCellWithIdentifier ab: forIndexPath stürzt ab, während dequeueReusableCellWithIdentifier dies nicht tut? 
  2. wenn ich IndexPath nicht durchlasse, ist die Zelle wiederverwendbar
  3. wenn es wiederverwendbar ist, was ist dann die Verwendung von dequeueReusableCellWithIdentifier: forIndexPath? 
29
OMGPOP

Wenn sich in Ihrem Storyboard keine Prototypzelle befindet, können Sie mit dequeueReusableCellWithIdentifier: api eine klassische Zelle erstellen

UITableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
   cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

Schnell:

var cell : UITableViewCell!
cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
if cell == nil {
    cell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier)
}
48
Florian Burel

Sie können eine UITableViewCell entreißen, ohne dass sich in Ihrem Storyboard eine Prototypzelle befindet. Sie müssen die Zelle mit Ihrer Tabelle für eine bestimmte Kennung (Zeichenfolge) registrieren. Du würdest das so machen:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];

Sie könnten dies vielleicht in viewDidLoad tun. 

Anschließend können Sie eine Zelle mit diesem Bezeichner wie üblich in Ihrer cellForRowAtIndexPath-Methode ausreißen.

Bearbeiten:

Wo MyCellIdentifier eine Konstante ist, die Sie natürlich irgendwo definiert haben.

12
JoeFryer

Swift 3.0

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: UITableViewCell = {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {
        return UITableViewCell(style: .default, reuseIdentifier: "cell")
        }
        return cell
    }()

    cell.textLabel?.text = anyArray[indexPath.row]

    return cell
}

Es ist gut, weil die Zelle ausgepackt ist.

9
Nik Kov

Sie müssen versuchen, die Zelle zu entreißen, und wenn Sie nil erhalten, erstellen Sie sie. In der xib-Datei der Zelle definieren Sie ihren Bezeichner.

Setze die Zellkennung in der Nib-Datei:

Set cell identifier

Besorgen Sie sich eine wiederverwendbare Zelle oder erstellen Sie eine neue:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"myCell";
    MyCell *cell = (MyCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        NSArray *t = [[NSBundle mainBundle] loadNibNamed:@"myCellXibFileName" owner:nil options:nil];
        for (id currentObject in t)
        {
            if ([currentObject isKindOfClass:[MyCell class]])
            {
                cell = (MyCell *)currentObject;
                break;
            }
        }
    }
    // Do whatever you want with the cell....
    return cell;
}
1
Aviel Gross

Öffnen Sie die Komponentenbibliothek, ziehen Sie eine UITableViewCell in Ihr TableView-Storyboard, und wählen Sie diese Zelle aus, um den Identitätsinspektor zu öffnen. Wählen Sie dann den gewünschten Standardstil aus, und legen Sie den Zellbezeichner wie im Code dequeueReusableCellWithIdentifier fest.

0
Linc