1

일반/단일 UIPickerView을 여러 ViewControllers으로 표시하려면 어떻게해야하는지 알고 싶습니다.여러 뷰 컨트롤러에 표시 할 일반 또는 단일 uipickerview

여러 ViewController에서 선택기 뷰를 표시하려고합니다. 이제 어떻게 만들 수 있습니까? ..

나는

.. 그것을 구현하고 그것을 위해 그 대리자를 쓰기 좋아하는 만드는 방법을 알고하지만 난 각 클래스에서 이러한 대리자를 생성하고 다시 agian 그 방법을 쓰고 싶지 않아

나는 무엇을 했는가.

나는 새 파일을 만들고 UIPickerView로 상속한다. 그 안에 표시 할 NSArray property을 만듭니다. 또한 대표자를 구현했지만 지금은 어떻게해야할지 모릅니다.

은 .. 나에게 선택기를 생성하고 데이터 역할을 완료 핸들러 클래스를 생성하는 것이 작업을 수행하는

답변

2

한 가지 방법을 일반적인 UIPickerView를하거나 내가 그것을 만들 수 있도록 예를 들어 어떤 종류의 표시 출처와 위임. 예를 들어, .H 파일에, 당신은하는 .m 파일에서

typedef void(^completionHandler) (NSString *selectedString); 

@interface RDPickerController : NSObject <UIPickerViewDataSource, UIPickerViewDelegate> 

@property (strong,nonatomic) UIPickerView *picker; 

-(instancetype)initWithCompletionHandler:(completionHandler) completion; 

을 같은 것을 할 당신이 필요로하는 데이터 소스 및 위임 방법을 구현하고, pickerView에 완료 블록을 호출 할 수 있습니다 : didSelectRow : inComponent : 방법, 컨트롤러 클래스에서

@interface RDPickerController() 
@property (strong,nonatomic) NSArray *data; 
@property (copy,nonatomic) completionHandler compBlock; 
@end 

@implementation RDPickerController 


-(instancetype)initWithCompletionHandler:(completionHandler)completion { 
    if (self = [super init]) { 
     _picker = [UIPickerView new]; 
     _picker.delegate = self; 
     _picker.dataSource = self; 
     _data = @[@"One", @"Two", @"Three", @"Four", @"Five", @"Six", @"Seven", @"Eight", @"Nine", @"Ten"]; 
     _compBlock = completion; 
    } 
    return self; 
} 


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


-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return self.data.count; 
} 


-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    return self.data[row]; 
} 


-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    self.compBlock(self.data[row]); 
} 

, 생성하고이 같은 선택 도구를 사용할 수

@interface ViewController() 
@property (strong,nonatomic) RDPickerController *pc; 
@end 

@implementation ViewController 

- (IBAction)showPicker:(UIButton *)sender { 
    self.pc = [[RDPickerController alloc] initWithCompletionHandler:^(NSString *selectedString) { 
     NSLog(@"%@",selectedString); 
     // do whatever with the returned data here 
    }]; 

    [self.view addSubview:self.pc.picker]; 
} 
+0

그것을 어떻게 내가 그것을 내 자신있는 NSArray를 보낼 수 있습니다 노력하고 있습니다 .. 그리고 나는 끝났어 .. – Nepster

+0

내 자신의 _data – Nepster

+0

@Nepster를 의미합니다. 데이터를이 클래스에 전달해야하는 경우 init 메서드를 initWithData : (NSArray *) data completionHandler : (completionHandler) 완료로 변경하고 배열을 전달합니다. – rdelmar