iPhone – Creazione personalizzata di UITableViewCell bordi superiore e inferiore

Ho cercato dappertutto e non ho trovato la mia risposta.

Ho compilazione di una UITableView con dinamica cellule JSON e sto cercando di nascondere eventuali cellule extra. Ho spento la separatori in IB, e, naturalmente, tutti i separatori scomparire. Come faccio ad aggiungere una riga nella parte inferiore e superiore di ogni tableviewcell in modo che solo le cellule che hanno informazioni vedi un confine? Ho importato Quarzo e hanno giocato con CALayer ma non riesco a trovare una soluzione.

Ho trovato una domanda simile qui, ma l’unica risposta è stata molto utile.

Cosa sarebbe meglio, un modo diverso di fare questo?

Qui sono i miei cellForRowAtIndexPath e il mio numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    //Return the number of rows in the section.
    //set equal to the information in the array

    return [_jsonDataArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    //create Dictionary of data in row
    NSDictionary *jsoninfo = [_jsonDataArray objectAtIndex:indexPath.row];

    //get required keys from dictionary and assign to vairables
    NSString *title = [jsoninfo objectForKey:@"title"];
    NSString *subtitle = [jsoninfo objectForKey:@"subtitle"];
    NSURL *imageURL = [NSURL URLWithString:[jsoninfo objectForKey:@"series_image_URL"]];

    //download the images.
    NSData *imgData = [NSData dataWithContentsOfURL:imageURL];
    UIImage *img = [[UIImage alloc] initWithData:imgData];


    //set boarder for custom cells... I need to have a border on the top and bottom of the cells I am creating so xcode does not autofill the empty space.



    //fill in text to cells
    cell.textLabel.text = title;
    cell.detailTextLabel.text = subtitle;
    cell.imageView.image = img;

    return cell;
}

InformationsquelleAutor Siriss | 2012-12-20

5 Replies
  1. 24

    Penso anche che non è l’idea migliore, ma se si vuole veramente fare questo, ecco il codice che consentirà di ottenere ciò che si vuole:

    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
    //Draw top border only on first cell
    if (indexPath.row == 0) {
        UIView *topLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 1)];
        topLineView.backgroundColor = [UIColor grayColor];
        [cell.contentView addSubview:topLineView];
    }
    
    UIView *bottomLineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.bounds.size.height, self.view.bounds.size.width, 1)];
    bottomLineView.backgroundColor = [UIColor grayColor];
    [cell.contentView addSubview:bottomLineView];

    Inserire questo codice nel tableView:cellForRowAtIndexPath: metodo. L’aspetto finale del vostro UITableView sarà come questo:

    iPhone - Creazione personalizzata di UITableViewCell bordi superiore e inferiore

    Tener conto che questo non è molto buona, soprattutto se si hanno un sacco di cellule. Se si dispone di una grande quantità di dati, fare riferimento a questa domanda COSÌ per un aiuto su come ottimizzare il disegno.

    Grazie per l’aiuto. Quale sarebbe il modo migliore per farlo? Io voglio fare è veloce come possibile.
    Il modo migliore sarebbe la creazione di sottoclassi UITableViewCell e sovrascrivere il drawRect: metodo con il codice nel mio collegati domanda. EDIT: Il codice come si può vedere la risposta con più upvotes.
    Penso che si dovrebbe almeno provare il più “facile” metodo prima di procedere con l’ottimizzazione della soluzione, si potrebbe trovare è abbastanza veloce.
    Ok grazie, stavo proprio guardando quella legata domanda. Questo ha funzionato abbastanza bene, anche se ho bisogno di aggiungere imbottitura per il mio tableviewcells per soddisfare le mie miniature… ma questo è un problema diverso. Voglio dare una prova e vedere che è meglio. Ti ringrazio molto!!!!
    Che cosa è una consentirebbe di cellule di riordino? Come risolvere il problema se l’utente trascina la prima riga inferiore e un altro prende il suo posto?

    InformationsquelleAutor Marko Nikolovski

  2. 1

    Solo provare a tableView:cellForRowAtIndexPath: metodo

    [cell.contentView.layer setBorderColor:[UIColor grayColor].CGColor];
    [cell.contentView.layer setBorderWidth:1.0f];
    Sarebbe buono, ma anche set di bordo sinistro e destro che non è quello che l’OP vuole.

    InformationsquelleAutor seufagner

  3. 0

    Sembra una soluzione sub-ottima per provare a “distinguere” il tuo valido cellule da quelle vuote con le linee. Un approccio superiore sarebbe a pulire i dati di origine prima di popolare la tabella con esso.

    Io non li crea, ma xcode riempie il vuoto tableview spazio con celle vuote. Ho solo creare il numero di cellule in numberOfRowsInSection pari al numero di oggetti nella mia matrice di dati. Attualmente ci sono due oggetti e cellule creato, ma xcode riempie il resto.
    Ho modificato la mia risposta. Probabilmente sarei in grado di aiutarti a creare linee, ma suona come una cattiva idea…
    Io ancora non capisco cosa intendi per “ripulire l’origine dati”. Come funziona l’origine dati hanno nulla a che fare con i confini di un UITableViewCell? Io sono solo la creazione di 2 cellule, xcode fa automaticamente il resto, immagino perché è il prototipo di cellule. Io sono aperto a qualsiasi modo di fare questo

    InformationsquelleAutor HackyStack

  4. 0

    Personalizzate Cellule. Il Datasoure (Modelli) dovrebbe guidare le informazioni, le Custom Cellule. Creare un setter Personalizzata Cella di classe che può essere fissato a ogni riga. come in….


    1. Assegnazione Personalizzata delle Cellule, con riutilizzo Id,

    2. Passare la proprietà che è di determinare se la linea dovrebbe mostrare:

      [cella setCustomLines:Modello.proprietà];

    3. ritorno cella;


    Si avrà una maggiore flessibilità per progettare il CustomCell qualsiasi modo si desidera, Immagini, Linee, Colori o altri modi di lasciare il tuo utente di vedere una differenza tra le vostre cellule.

    Tecnicamente, Marco della Risposta e buon lavoro su una soluzione semplice. Ma non sarà in grado di espandere questo molto più di questo questo.

    InformationsquelleAutor Newbyman

  5. 0

    Questa non è la risposta alla domanda, ma la soluzione pulita per il problema originale.

    Aggiungere un vuoto UIView come il piè di pagina del UITableView. Quindi le celle vuote vengono nascosti. Vedere questa risposta.

    InformationsquelleAutor wrtsprt

Lascia un commento