2009-10-11 14 views
5

Ho un'app di coniugazione verbo che visualizza le traduzioni di verbi nella prima cella di una tabella. Al momento la lista di traduzioni è solo una stringa (elenco separato da virgola), ma mi piacerebbe cambiarla per avere pulsanti cliccabili. Ho giocato con l'aggiunta di pulsanti alla visualizzazione cella senza troppi successi, ma la mia unica esperienza con celle personalizzate è stata l'utilizzo di un posizionamento specifico, quindi non sono sicuro su come ottenere un elenco dinamico di pulsanti (larghezza variabile) all'interno di una cella.Aggiunta di pulsanti dinamicamente a uitableviewcell - App per iPhone

Qualsiasi aiuto molto apprezzato.

Cheers.

risposta

3

Creare un oggetto UIView. Imposta gli oggetti UIButton come visualizzazioni secondarie di questa vista principale.

Una volta che avete, è possibile aggiungere questa vista genitore alla proprietà contentView della cella.

Nel metodo -tableView:cellForRowAtIndexPath: delegato, si genera la vista padre (e il numero e il tipo di pulsanti all'interno) in base a uno stato condizionale, prima di aggiungerlo al numero di cella contentView.

Per quanto riguarda l'operazione a livello di codice, non appena alcune condizioni cambiano, eseguire [tableView reloadData] o metodi simili per aggiornare la visualizzazione tabella e le relative celle.

4

Do seguente

-(CGRect)placeAButton:(NSString*)textFromField withCell:(UITableViewCell*)cell 
{ 
    CGSize  theSize; 
    CGSize  constraintSize; 

    // Create a button and add as subview to cell 
    // Get coordinates to place the button 

    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 

    button.titleLabel.font    = [UIFont systemFontOfSize:MEDIUM_FONT_SIZE];; 
    button.titleLabel.lineBreakMode  = UILineBreakModeTailTruncation; 
    button.contentVerticalAlignment  = UIControlContentVerticalAlignmentCenter; 
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [button setTitle:textFromField forState:UIControlStateNormal]; 

    UIImage *buttonBkground; 
    buttonBkground = [UIImage imageNamed:@"blueButton.png"]; 
    UIImage *newImage = [buttonBkground stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0]; 
    [button setBackgroundImage:newImage forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:button]; 

[self.tableView reloadData] 
} 

Dovrete prendere cura di larghezza delle celle, altezza ecc mentre creazione di pulsanti in modo dinamico.

+0

Ciao, grazie per le vostre risposte. Ho avuto una crepa in questo, ma non stavo facendo apparire niente. Ne avrò un'altra quando ne avrò la possibilità, mi dispiace non aver potuto rispondere prima (o dedicare abbastanza tempo per risolvere i problemi che sto ancora ottenendo). Proverò a farlo al più presto. – alan

4

L'ho appena fatto per la mia nuova app per iPad quindi ho pensato di incollare il codice.

// NOTE - This is within a loop  
// Add the translation as a button 
    UIButton *translationButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    translationButton.backgroundColor = [UIColor clearColor]; 
    translationButton.titleLabel.font = [UIFont boldSystemFontOfSize:16]; 
    [translationButton setTitle:translation forState:UIControlStateNormal]; 
    [translationButton addTarget:self action:@selector(translationSearch:) forControlEvents:UIControlEventTouchUpInside]; 
    // Work out required size 
    fontSize = [translationButton.titleLabel.text sizeWithFont:translationButton.titleLabel.font];  
    CGRect buttonFrame = CGRectMake(xOffset, 15, fontSize.width + 20.0, 24); 
    [translationButton setFrame:buttonFrame]; 

    // Now set the new x Offset 
    xOffset = buttonFrame.origin.x + buttonFrame.size.width + 6.0; 

    [verbView addSubview:translationButton];  

Cheers.

+0

cosa potrebbe essere fatto se non abbiamo il titolo del pulsante per differenziare i pulsanti e non hanno alcun testo. Nel mio caso sto solo usando le immagini invece del titolo del pulsante. Cosa si può fare in questo caso? –

+0

Se stai usando le immagini, suppongo che tu ne conosca le dimensioni. In questo caso puoi semplicemente posizionarli a intervalli regolari. Il codice precedente utilizza fontSize.width per calcolare l'offset. Dovresti semplicemente essere in grado di usare la larghezza della tua immagine. – alan

0

Si può fare questo all'interno della funzione viewcontroller cellForRowAtIndexPath:

var btn = UIButton(frame: CGRectMake(100, 100, 100, 20)); 
    btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal); 
    btn.setTitle("My Button", forState:UIControlState.Normal); 
    btn.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside); 

    //add the buttons to the cell 
    cell.contentView.addSubview(btn) 

Aggiungi un'altra funzione nella stessa classe che riceverà il pulsante dell'evento sfruttato

func buttonTapped(sender: UIButton!) 
{ 
    println("Button Tapped") 
} 
+0

Quando si sposta la cella verso l'alto o verso il basso, il pulsante sopra viene ricreato di nuovo. –

+0

Crea il pulsante all'esterno della funzione e aggiungi alla cella dopo aver verificato se il pulsante esiste. Se ci sono molte celle, mantieni una mappa o un indice di pulsanti. – srinivas

Problemi correlati