В вашем viewDidLoad
:
[pickerView1 setAlpha:1.0];
[pickerView2 setAlpha:0.0];
Там, где pickerView1 виден, тогда как pickerView2 нет.
И везде, где вы хотите отобразить pickerView2, скрывая pickerView1 - просто измените вышеприведенное.
[pickerView1 setAlpha:0.0];
[pickerView2 setAlpha:1.0];
Существуют и другие способы сделать это, но я предпочитаю это делать.
ОБНОВЛЕНИЕ:
Вот как вы могли бы реализоватьиспользуя ваш код:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 1){
[scrollView setContentOffset:CGPointMake(0, 223) animated:YES];
CGRect pickerFrame = CGRectMake(0, 152, 0, 0);
if (pickerView1 == nil) { //<--- You don't need to keep calling alloc and init. This if statement only calls if you have not already declared pickerView1.
UIPickerView *pickerView1 = [[UIPickerView alloc] initWithFrame:pickerFrame];
pickerView1.showsSelectionIndicator = YES;
pickerView1.dataSource = self;
pickerView1.delegate = self;
[pickerView1 setTag:1];
[self.view addSubview:pickerView1];
}
[pickerView1 setAlpha:1.0]; //<--- New Code
if (pickerView2 != nil) { //<-- Checking if pickerView2 is declared yet, if not then it is already invisible. ;)
[pickerView2 setAlpha:0.0];
}
//removed release call - add to dealloc method
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
else if (indexPath.row == 2){
[scrollView setContentOffset:CGPointMake(0, 273) animated:YES];
CGRect pickerFrame = CGRectMake(0, 152, 0, 0);
if (pickerView2 == nil) { //<-- again, no need to always alloc and init
UIPickerView *pickerView2 = [[UIPickerView alloc] initWithFrame:pickerFrame];
pickerView2.showsSelectionIndicator = YES;
pickerView2.dataSource = self;
pickerView2.delegate = self;
[pickerView2 setTag:2];
[self.view addSubview:pickerView2];
}
[pickerView2 setAlpha:1.0]; //<--- New Code
if (pickerView1 != nil) { //<-- Checking if pickerView1 is declared yet, if not then it is already invisible. ;)
[pickerView1 setAlpha:0.0];
}
//add release call to dealloc method
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
ОБНОВЛЕНИЕ 2:
Попробуйте это:
В файле заголовка (.h) добавьте это:
@interface <name>ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> {
UIPickerView *pickerView1;
UIPickerView *pickerView2;
}
@property (nonatomic, retain) UIPickerView *pickerView1;
@property (nonatomic, retain) UIPickerView *pickerView2;
@end
Вы должны объявить здесь свои pickerViews, чтобы мой предыдущий код работал.Также обратите внимание на протоколы <UIPickerViewDelegate, UIPickerViewDataSource>
.
Вернувшись в файл реализации (.m), не забудьте синтезировать:
@synthesize pickerView1;
@synthesize pickerView2;
И в - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
заменить:
UIPickerView *pickerView1 = [[UIPickerView alloc] initWithFrame:pickerFrame];
с
pickerView1 = [[UIPickerView alloc] initWithFrame:pickerFrame];
И замените:
UIPickerView *pickerView2 = [[UIPickerView alloc] initWithFrame:pickerFrame];
на:
pickerView2 = [[UIPickerView alloc] initWithFrame:pickerFrame];
Просто не забудьте освободить их в методе dealloc:
- (void)dealloc {
[pickerView1 release];
[pickerView2 release];
[super dealloc];
}
Ваша необъявленная проблема должна быть решена сейчас.