UIPickerView ne peut pas autosélectionner la dernière ligne lorsqu'elle est compilée sous Xcode 4.5.2 & iOS 6

je me suis cogné la tête contre le mur en essayant de diagnostiquer l'incapacité de mon application à présélectionner automatiquement la dernière rangée d'UIPickerView en utilisant du code qui fonctionnait avec succès sous les anciennes versions de XCode. Je pense que C'est un bug dans Xcode plutôt que iOS 6 parce que mon ancienne application fonctionnant sur un périphérique iOS 6 fonctionne correctement, mais recompiler le code sous Xcode 4.5.2 ne fonctionne pas correctement. J'ai rassemblé l'échantillon suivant pour démontrer le problème, mais avant de soumettre un bug rapport, je voudrais des avis d'autres personnes sur ce forum afin de déterminer si le problème est avec mon code ou est en effet un bug dans Xcode/iOS.

j'ai créé une application de vue unique et configuré le storyboard avec un contrôleur de navigation, et deux IBOutlets, un Vers un UILabel où j'affiche la ligne sélectionnée, et un vers un UIPickerView.

<!-Voici le fichier d'en-tête de mon contrôleur de vue personnalisé:

#import <UIKit/UIKit.h>

@interface DisposableViewController : UIViewController
    <UIPickerViewDataSource, UIPickerViewDelegate>
@end

voici le fichier d'implémentation pour ma vue personnalisée contrôleur:

#import "DisposableViewController.h"

const NSInteger MAX_VALUE = 10;

@interface DisposableViewController ()

@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property (weak, nonatomic) IBOutlet UILabel *selectedValueLabel;

@end


@implementation DisposableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}


- (void)viewWillAppear:(BOOL)animated
{
    [self.pickerView reloadAllComponents];
    [self.pickerView selectRow:MAX_VALUE inComponent:0 animated:NO];
    self.selectedValueLabel.text = [NSString stringWithFormat:@"%d", [self.pickerView selectedRowInComponent:0]];
}


//**
//** UIPickerViewDataSource methods
//**

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return MAX_VALUE + 1;
}


//**
//** UIPickerViewDelegate methods
//**

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"%d", row];
}


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    self.selectedValueLabel.text = [NSString stringWithFormat:@"%d", row];
}


@end
<!-Voici une capture d'écran démontrant le problème:

Screenshot

notez que mon code essaie d'autosélectionner la dernière ligne dans la vue UIPickerView dans la méthode viewWillAppear:, mais lorsque le programme s'exécute, le label de valeur obtient la ligne 10 lors de l'appel de [self.pickerView selectedRowInComponent: 0], mais l'UIPickerView lui-même visuellement semble avoir sélectionné 9. Je crois que c'est un bug, mais voudrais d'autres avis ou suggestions comment je peut résoudre ce problème. Merci pour votre attention.

18
demandé sur user1819329 2012-11-13 01:50:59

2 réponses

ce bug est causé par L'option Utiliser Autolayout dans le storyboard, mais j'ai trouvé une solution qui me permet de continuer à utiliser layout automatique:

si j'appelle la méthode [pickerView selectRow:incomprent:] dans le viewDidAppear: de mon contrôleur de vue au lieu de dans le viewWillAppear:, alors L'UIPickerView s'ajuste correctement pour sélectionner la bonne ligne bien que la sélection soit momentanément visible pendant que le picker tourne de la mauvaise sélection à la bonne.

12
répondu user1819329 2012-11-15 03:16:08

ressemble certainement à un bug relatif à la nouvelle fonctionnalité de mise en page automatique dans iOS 6. J'éprouvais la même chose, mais en essayant de voir si cela s'est produit dans iOS 5.1, j'ai remarqué que ça a commencé à fonctionner.

Essayez ceci: dans la table de montage ou de plume fichier en question, éteignez mise en page automatique.

2
répondu Steven Striga 2012-11-13 21:23:57