Как объединить два UIPickerView в один ViewController? - PullRequest
2 голосов
/ 08 января 2011

Я пытаюсь собрать 2 UIPickerViews в один ViewController.Каждый UIPickerView имеет разные массивы данных.Я использую конструктор интерфейса, чтобы связать сборщики.Я знаю, что мне придется использовать отдельные делегаты и источники данных, но я не могу все правильно соединить с создателем интерфейса.Вот весь мой код:

pickerTesting.h

#import <UIKit/UIKit.h>
#import "picker2DataSource.h"

@interface pickerTestingViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>{

IBOutlet UIPickerView *picker;
IBOutlet UIPickerView *picker2;
NSMutableArray  *pickerViewArray;
}

@property (nonatomic, retain) IBOutlet UIPickerView *picker;
@property (nonatomic, retain) IBOutlet UIPickerView *picker2;
@property (nonatomic, retain) NSMutableArray *pickerViewArray;
@end

pickerTesting.m

#import "pickerTestingViewController.h"

@implementation pickerTestingViewController

@synthesize picker, picker2, pickerViewArray;


- (void)viewDidLoad
 {
[super viewDidLoad];
pickerViewArray = [[NSMutableArray alloc] init];

[pickerViewArray addObject:@" 100 "];
[pickerViewArray addObject:@" 200 "];
[pickerViewArray addObject:@" 400 "];
[pickerViewArray addObject:@" 600 "];
[pickerViewArray addObject:@" 1000 "];

[picker selectRow:1 inComponent:0 animated:NO];
picker2.delegate = self;
picker2.dataSource = self;
}

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

- (void)pickerView:(UIPickerView *)picker didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

}

- (NSInteger)pickerView:(UIPickerView *)picker numberOfRowsInComponent:(NSInteger)component;
{
return [pickerViewArray count];

}

- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
return [pickerViewArray objectAtIndex:row];
}

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
 }

- (void)viewDidUnload
{
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


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


@end

И у меня естьотдельный класс для другого источника данных.

picker2DataSource.h

@interface picker2DataSource : NSObject <UIPickerViewDataSource, UIPickerViewDelegate>
{
NSMutableArray  *customPickerArray;
}

@property (nonatomic, retain) NSMutableArray *customPickerArray;

@end

picker2DataSource.m

#import "picker2DataSource.h"


@implementation picker2DataSource
@synthesize customPickerArray;

- (id)init
{
// use predetermined frame size
self = [super init];
if (self)
{
    customPickerArray = [[NSMutableArray alloc] init];

    [customPickerArray addObject:@" a "];
    [customPickerArray addObject:@" b "];
    [customPickerArray addObject:@" c "];
    [customPickerArray addObject:@" d "];
    [customPickerArray addObject:@" e "];


}
return self;

}

- (void)dealloc
{
[customPickerArray release];
[super dealloc];
}

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

- (void)pickerView:(UIPickerView *)picker2 didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

}

- (NSInteger)pickerView:(UIPickerView *)picker2 numberOfRowsInComponent:(NSInteger)component;
{
return [customPickerArray count];

}

- (NSString *)pickerView:(UIPickerView *)picker2 titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
return [customPickerArray objectAtIndex:row];
}

@end

Любая помощь или примеры кода будут великолепны.Спасибо.

Ответы [ 2 ]

5 голосов
/ 08 января 2011

Используя Interface Builder, установите свойства тега двух UIPickerViews в 1 и 2 соответственно.Затем в каждом методе делегата используйте операторы if для проверки тега аргумента UIPickerView.

1 голос
/ 08 января 2011

Как насчет UIPickerViewDataSource метода

// Возвращает количество отображаемых столбцов.

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

return 2;

}
...