2009-08-24 8 views
1

Je voudrais créer une ligne assez complexe dans mon UIPicker. Tous les exemples que j'ai vu créer une vue à partir de zéro comme si ...Charger une ligne à partir de NIB dans UIPickerView viewForRow

- (UIView *) pickerView:(UIPickerView *)pickerView 
viewForRow:(NSInteger)row 
forComponent: (NSInteger)component reusingView:(UIView *)view 
{ 
    CGRect cellFrame = CGRectMake(0.0, 0.0, 110.0, 32.0); 
    UIView *newView = [[[UIView alloc] initWithFrame:cellFrame] autorelease]; 
    newView.backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:1.0]; 
    return newView; 
} 

Cela fonctionne essentiellement, il montre un rectangle violet dans mon Picker.

Mais je voudrais être en mesure de charger l'élément pickerView d'un fichier NIB comme si ...

- (UIView *) pickerView:(UIPickerView *)pickerView 
viewForRow:(NSInteger)row 
forComponent: (NSInteger)component reusingView:(UIView *)oldView 
{ 

    NSArray * nibs = [[NSBundle mainBundle] loadNibNamed:@"ExpenseItem" owner:self options:nil]; 
    UIView *newView = [nibs objectAtIndex:0]; 
    return newView; 
} 

On obtient ainsi un écran blanc, qui n'a même pas montrer le sélecteur plus. Je peux juste le faire de la première façon et construire mes sous-vues en code, mais il y a évidemment quelque chose qui se passe ici que je ne comprends pas. Est-ce que quelqu'un sait?

Répondre

2

Mettez la cellule dans sa propre plume

@interface 
    IBOutlet UITableViewCell *cellFactory; 


@implementation 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LapCellID"]; 
    if(nil == cell) { 
     [[NSBundle mainBundle] loadNibNamed:@"LapCell" owner:self options:nil]; 
     cell = [cellFactory retain]; // get the object loadNibNamed has just created into cellFactory 
     cellFactory = nil; // make sure this can't be re-used accidentally 
    } 
1

je préfère créer une cellule à l'intérieur d'une ressource .xib comme le premier élément, puis s'y référer comme ceci:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LapCellID"]; 
if(!cell) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed: cellNibName owner: nil options: nil]; 
    cell = [nib objectAtIndex: 0]; 
} 

Cette supprime la dépendance d'avoir la ressource de cellule nécessite la connaissance du contrôleur de table (le cellFactory Outlet) permettant la cellule à être réutilisé dans plusieurs contrôleurs plus facile.

Questions connexes