У меня проблема с представлением выбора в Xcode 4.4. Я хочу заполнить 1 Picker несколькими массивами. Я посмотрел / прочитал много руководств и почти смог приступить к работе. Это мой код:
*.h
#import <UIKit/UIKit.h>
@interface PickerView : UIViewController
<UIPickerViewDataSource,UIPickerViewDelegate>
{
IBOutlet UIPickerView *picker;
NSMutableArray *array_1;
NSMutableArray *array_2;
}
@property (strong, nonatomic) IBOutlet UIView *pickerContainer;
@property (strong, nonatomic) IBOutlet UITextField *textfield_1;
@property (strong, nonatomic) IBOutlet UITextField *textfield_2;
- (IBAction)showArray_1Picker:(id)sender;
- (IBAction)showArray_2Picker:(id)sender;
- (IBAction)hidePicker:(id)sender;
@end
*.m
#import "PickerView.h"
@interface PickerView ()
@end
@implementation PickerView
@synthesize pickerContainer;
@synthesize textfield_1;
@synthesize textfield_2;
int textFieldTouched = 0;
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)picker
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent (NSInteger)component
{
switch(textFieldTouched)
{
case 1:
return [array_1 count];
break;
case 2:
return [array_2 count];
break;
default:
return 0;
}
}
- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
switch(textFieldTouched)
{
case 1:
return [array_1 objectAtIndex:row];
break;
case 2:
return [array_2 objectAtIndex:row];
break;
default:
return @"nothing";
}
}
- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
switch(textFieldTouched)
{
case 1:
textfield_1.text = [array_1 objectAtIndex:[pickerView selectedRowInComponent:0]];
break;
case 2:
textfield_2.text = [array_2 objectAtIndex:[pickerView selectedRowInComponent:0]];
break;
}
}
- (void)viewDidLoad
{
array_1 = [[NSMutableArray alloc] init];
[array_1 addObject:@"1"];
[array_1 addObject:@"2"];
[array_1 addObject:@"3"];
[array_1 addObject:@"4"];
[array_1 addObject:@"5"];
array_2 = [[NSMutableArray alloc] init];
[array_2 addObject:@"a"];
[array_2 addObject:@"b"];
[array_2 addObject:@"c"];
[array_2 addObject:@"d"];
[array_2 addObject:@"e"];
pickerContainer.frame = CGRectMake(0, 460, 320, 261);
[super viewDidLoad];
}
- (void)viewDidUnload
{
[self setPickerContainer:nil];
[self setTextfield_1:nil];
[self setTextfield_2:nil];
[super viewDidUnload];
}
- (IBAction)showArray_1Picker:(id)sender
{
[textfield_1 resignFirstResponder];
textFieldTouched = 1;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
pickerContainer.frame = CGRectMake(0, 200, 320, 261);
[UIView commitAnimations];
}
- (IBAction)showArray_2Picker:(id)sender
{
[textfield_2 resignFirstResponder];
textFieldTouched = 2;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
pickerContainer.frame = CGRectMake(0, 200, 320, 261);
[UIView commitAnimations];
}
- (IBAction)hidePicker:(id)sender
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
pickerContainer.frame = CGRectMake(0, 460, 320, 261);
[UIView commitAnimations];
}
@end
Итак, у меня есть 2 основные проблемы:
Если я установлю textFieldTouched = 0 (или> 2), как я сделал до того, как мой выборщик будет пустым, когда он появится. В любом случае, если я снова его скрою, он запишет первое значение соответствующего массива в текстовое поле.
Если я устанавливаю textFieldTouched = 1 или = 2, средство выбора заполняется связанным массивом независимо от того, какое текстовое поле я пытаюсь редактировать. Но если я прокручиваю значения в средстве выбора вне поля зрения, они изменились, когда я прокручиваю назад.
Я хочу, чтобы это было так:
Если я коснусь текстового поля 1, появится средство выбора, заполненное массивом 1
Если я коснусь текстового поля 2, появится средство выбора, заполненное массивом 2
и так далее.
Можешь помочь мне с этим?
Я загрузил код, чтобы вы могли лучше его рассмотреть.
https://dl.dropbox.com/u/5858884/ProblemCode.zip
P.S.
Английский не мой родной язык, так что извините за ошибки ;)
Я начал программировать 2 недели назад, поэтому, если вы обнаружите что-то не так в моем коде, что не относится к моей проблеме, пожалуйста, сообщите мне, чтобы я мог исправиться :)