2012-08-27 14 views
43

Ho un progetto abbastanza grande (~ 20 scene). Uno dei quali è un TableViewController con una classe UITableViewController personalizzata. Ho dato alla cella un identificatore di riutilizzo e ho aggiunto un'etichetta. Quando provo e Ctrl + trascinare l'etichetta al file di intestazione UITableViewController per creare una presa di corrente, ottengo il seguente errore:Errore strano quando si aggiungono elementi alle celle di prototipo nello storyboard-IB

error: Illegal Configuration: Connection "tableInfoView" cannot have a prototype object as its destination.

Che cosa è questo? Sto trascurando qualcosa di ovvio? O devo creare una classe di cella personalizzata e trascinare l'outlet su quello? In tal caso, come posso quindi specificare i dati che vengono visualizzati in modo univoco per ciascuna cella da UITableViewController?

+10

Non è possibile collegare l'etichetta del prototipo a una presa nel controllore vista tabella, dal momento che il controller non è il proprietario del prototipo ('UITableViewCell' è).Per i prototipi di celle dinamiche, devi fare qualcosa come impostare un tag sulla cella e cercare l'etichetta usando quella dopo aver rimosso la cella. –

+0

L'ho appena capito: P Grazie comunque per il tuo aiuto! Scrivilo come risposta e lo accetterò. –

risposta

67

In realtà non è possibile effettuare una presa da un prototipo di cella dinamico nel controller di visualizzazione delegato UITableView.

Dovrai creare sottoclasse UITableViewCell e quindi attribuire questa classe al tuo prototipo.

Quindi è possibile trascinare Ctrl dall'etichetta al file di intestazione della sottoclasse UITableViewCell.

Finalmente è possibile accedere a questa presa nel codice delegato dopo aver importato il file di intestazione UITableViewCell in esso.

Questo è documentato da Apple there nella sezione "La tecnica per il contenuto di righe dinamiche".

+0

C'è un modo per le celle raggruppate? Sto attraversando un momento difficile ... – user805981

+0

Cosa intendi per "celle raggruppate"? – dulgan

1

Ho affrontato lo stesso problema ma in seguito si è scoperto che si trattava solo di uno stupido errore. ho erroneamente trascinato l'etichetta dalla cella per di mio controller @interface

Questo potrebbe essere il vostro problema troppo. basta un controllo incrociato una volta.

+0

Non penso che il poster stia chiedendo un IBAction ma piuttosto uno sbocco per configurare il controllo. –

+0

@LeviRoberts Non sto parlando di IBActions qui. – thesummersign

2

Ho avuto lo stesso errore me stesso. Solo per aggiungere un'altra causa potenziale per i futuri lettori:

Nel mio caso ho copiato un controllo (un pulsante in questo caso) da una cella prototipo a quella successiva e l'azione si riferisce ancora alla cella adiacente. La mia tabella ha diverse celle prototipo.

Il fatto, che in realtà era una sottoclasse corretta di UITableViewCell che era correttamente collegato alla cella del prototipo rendeva difficile effettivamente vedere l'errore.

10

o si potrebbe dare l'etichetta di un tag (ad esempio 100) e usare

myLabel = [myTableView viewForTag:100]; 

per ottenere l'etichetta

-1

Impostare l'identificatore riutilizzo destra utilizzato nel file di .m nella Storyboard per la cella Prototype Ho avuto la stessa situazione e questo mi ha aiutato

+0

mi8 essere stupido ma sbaglio ci dimenticheremo !!! – Wodjefer

-2

Dopo aver fatto tutto correttamente, se il problema esiste ancora, ho appena rimosso tutti i punti vendita e li ho ricongiunti con attenzione e ha funzionato molto bene per me.

1

Contrassegna l'etichetta e puoi raggiungere l'etichetta ovunque nel viewcontroller come con viewWithTag dalla vista tabella.

UILabel *destinationLabel = (UILabel *)[self.tableView viewWithTag:1]; 


    destinationLabel.text = @"Label Destaination"; 
Problemi correlati