2012-11-06 16 views
5

Ho un UITableViewCell personalizzato con molti pulsanti, campi di testo, etichette e una vista. Nascondo e mostro dove sono richiesti su ciascun percorso dell'indice. Ma per qualche ragione/le righe non sono cliccabili!UITableViewCell non è selezionabile

Ho anche fatto le seguenti cose via codice per assicurarmi che se qualcosa sta succedendo in fishy in IB, può essere risolto tramite queste linee ma inutile.

cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
cell.userInteractionEnabled = YES; 

Mi chiedo se le viste nascoste sono il colpevole qui o qualcos'altro?

+1

HIG iOS: * "Le applicazioni rispondono ai gesti, non ai clic" * http://developer.apple.com/library/ios/documentation/userexperience/conceptual/mobilehig/Characteristics/Characteristics.html#//apple_ref/doc/uid/TP40006556-CH7-SW4 – Felix

+0

@ phix23 - Sì, ma come si applica nel mio caso? – itsaboutcode

+1

imposta oggetto personalizzato userInteractionEnabled non è – NANNAV

risposta

1

Se la visualizzazione della tabella è modificabile, questo potrebbe essere il motivo per cui le cellule non sono cliccabili

Se questo è il caso e si ha bisogno cellule di essere cliccabile durante l'editing - semplicemente fare questo:

tableView.allowsSelectionDuringEditing = YES; 
+0

Potrei sembrare stupido, ma dove posso vedere se tableview è modificabile o no? – itsaboutcode

+0

Per impostazione predefinita la vista tabella non è modificabile. Il modo più semplice per vedere è che quando la tabella è in modalità di modifica, vedrai il segno meno nel cerchio rosso o il segno più nel cerchio verde accanto alle celle della tabella. È possibile impostare la proprietà "modifica" delle impostazioni modificabili della tabella su TRUE, ma è necessario anche implementare alcuni metodi aggiuntivi per definire lo stile di modifica e gestire la modifica stessa, è possibile leggere qui: http://developer.apple.com/library /ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006943-CH3-SW58 – marika

0

Implementare questo metodo:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
+0

Ho già implementato questo metodo. – itsaboutcode

6

provare questo tableView.allowsSelection=YES;

ed è possibile implementare -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:

1

Nella tua UITableViewCell personalizzata, aggiungi btn, campi di testo, ecc. A contentView?

Forse se si aggiunge tutto a contentView, questo dovrebbe risolvere il problema. Spero che aiuti.

+0

Si prega di condividere un po 'di codice. Come stai creando l'UITableViewCell personalizzato? –

2

Questo è un esempio per un custom UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 

    cell= [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

} 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 

UILabel *lbl = [[UILabel alloc]initWithFrame:cell.frame]; 
lbl.backgroundColor = [UIColor clearColor]; 

UIImageView *cellImage = [[UIImageView alloc]initWithImage: [arrayImages objectAtIndex:indexPath.row]]; 
if (pointRange.location!=NSNotFound) { 


    cellImage.frame = CGRectMake(25,12.5, 75, 75); 
    lbl.frame = CGRectMake(0, 0, tableView.frame.size.width, 100); 
    lbl.font = [UIFont fontWithName:@"PineappleDemo" size:30.0]; 
} 

lbl.textColor =[UIColor colorWithRed:38.0/255.0 green:34.0/255.0 blue:98.0/255.0 alpha:1.0]; 
lbl.text =[arrayData objectAtIndex:indexPath.row]; 




for(UIView *v in [cell subviews]) 
{ 
    if([v isKindOfClass:[UILabel class]]||[v isKindOfClass:[UIImageView class]]||[v isKindOfClass:[UIButton class]]) 
     [v removeFromSuperview]; 
} 
if (index == indexPath.row) { 

    UILabel *lbl2 = [[UILabel alloc]initWithFrame:CGRectMake(50, 90, tableView.frame.size.width-200, 100)]; 
    lbl2.backgroundColor = [UIColor clearColor]; 
    lbl2.numberOfLines = 0; 
    lbl2.text = [arrayOffers objectAtIndex:indexPath.row]; 
    [cell addSubview:lbl2]; 
    [lbl2 release]; 

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    btn.frame = CGRectMake(tableView.frame.size.width-150, 100, 120, 84); 
    btn.backgroundColor = [UIColor clearColor]; 

    if (indexPath.row<=2) { 
     switch (indexPath.row) { 
      case 0: 
       [btn setImage:[UIImage imageNamed:@"lickFB.png"] forState:UIControlStateNormal]; 

       [btn addTarget:self action:@selector(facebook) forControlEvents:UIControlEventTouchUpInside]; 
       break; 
      case 1: 
       [btn setImage:[UIImage imageNamed:@"follow.png"] forState:UIControlStateNormal]; 

       [btn addTarget:self action:@selector(twitter) forControlEvents:UIControlEventTouchUpInside]; 
       break; 
      case 2: 

       [btn setImage:[UIImage imageNamed:@"rateUs.png"] forState:UIControlStateNormal]; 

       [btn addTarget:self action:@selector(rateAction) forControlEvents:UIControlEventTouchUpInside]; 

       break; 

      default: 
       break; 
     } 

    } 
    else{ 
     [btn setImage:[UIImage imageNamed:@"Buy_Button.png"] forState:UIControlStateNormal]; 
     switch (indexPath.row) { 
      case 3: 
       [btn addTarget:self action:@selector(deal1) forControlEvents:UIControlEventTouchUpInside]; 
       break; 
      case 4: 
       [btn addTarget:self action:@selector(deal2) forControlEvents:UIControlEventTouchUpInside]; 
       break; 
      case 5: 
       [btn addTarget:self action:@selector(deal3) forControlEvents:UIControlEventTouchUpInside]; 
       break; 

      case 6: 
       [btn addTarget:self action:@selector(deal4) forControlEvents:UIControlEventTouchUpInside]; 
       break; 



      default: 
       break; 
     } 

    } 
    [cell addSubview:btn]; 

} 

[cell addSubview:lbl]; 
[cell addSubview:cellImage]; 
[cellImage release]; 
[lbl release]; 
return cell; 

} 
3

io uso un sacco di diversi elementi dell'interfaccia utente nei miei UITableViewCells troppo, perché non provare e sottoclasse UITableViewCell e rotolare la propria classe, con gli articoli come proprietà di la cellula? Sembra funzionare per me.

in VincentsAwesomeCell.h:

@interface VincentsAwesomeCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UILabel *FooLabel; 
@property (weak, nonatomic) IBOutlet UILabel *BarLabel; 
@property (weak, nonatomic) IBOutlet UIImageView *ShimmyIcon; 
@property (weak, nonatomic) IBOutlet UILabel *DooWopLabel; 
@property (weak, nonatomic) IBOutlet UIImageView *UseIcon; 
@property (weak, nonatomic) IBOutlet UILabel *TheForceLabel; 
@property (weak, nonatomic) IBOutlet UIImageView *bobSledIcon; 
@property (weak, nonatomic) IBOutlet UILabel *WristWatchLabel; 
@property (weak, nonatomic) IBOutlet UILabel *MeatLoafLabel; 
@property (weak, nonatomic) IBOutlet UILabel *SciFiLabel; 
@property (weak, nonatomic) IBOutlet UILabel *CollinderLabel; 
@property (weak, nonatomic) IBOutlet UILabel *RhubarbLabel; 
@property (weak, nonatomic) IBOutlet UITextField *SuperTextField; 
@property (weak, nonatomic) IBOutlet UIStepper *stepper; 
@property (strong, nonatomic) IBOutlet UILabel *amountOfAwesomeness; 

Non dimenticare di usare:

in VincentsAwesomeCell.m:

- (void)prepareForReuse { 
    [super prepareForReuse]; 
    // Always call this! 
    // Reset custom stuff 
} 

per ripristinare le proprietà delle cellule per riutilizzare.

Poi, nel tuo TableViewController.m:

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Register the custom VincentsAwesomeCell NIB with the tableview 
    UINib *nib = [UINib nibWithNibName:@"VincentsAwesomeCell" bundle:nil]; 
    [[self tableView] registerNib:nib forCellReuseIdentifier:@"VincentsAwesomeCell"]; 
} 

Per quanto riguarda il

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Io lo uso per un UIStepper per tenere traccia di quali viene premuto passo-passo per esempio:

[[cell stepper]setTag:indexPath.row]; 
    [[cell stepper]addTarget:self action:@selector(stepperChanged:) forControlEvents:UIControlEventValueChanged]; 

Spero che questo aiuti!

P.S.

Uso un file .xib per creare il layout della mia cella personalizzata. Basta trascinare un UITableViewCell in InterFaceBuilder e personalizzare via! Non dimenticare di collegare le proprietà però!

0

se non è possibile eseguire correttamente l'attivazione "didSelectRowAtIndexPath", posizionare un UBUTTO BIG che occupa l'intera cella e eseguire le azioni necessarie facendo clic sul pulsante. Solo un'idea! :-)

+0

Grazie. Ma non è possibile in quanto ci sono campi di testo nella cella. – itsaboutcode

+0

Nessun problema, puoi avere il pulsante dietro tutti gli elementi di controllo, in modo che si attivi solo quando non ci sono altri elementi per rispondere. –

0

Ho avuto un problema simile. Risolto ma aggiungendo

self.clipsToBounds = YES; 

alla vista, su cui si trova il mio tableView. Così ho determinato che il mio TableView era al di fuori della cornice della sua vista genitore.

Problemi correlati