According to my requirement I need a UIPicker in multiple sections of my app with the same list. So I'm creating a custom class of UIPicker and so far i didn't receive any problem but one thing i would like improve is currently I'm setting the value from the textfield delegate method lets take a example :-
MembershipPickerView.h
@interface MembershipPickerview : UIPickerView <UIPickerViewDelegate,UIPickerViewDataSource>
@property (strong, nonatomic) NSArray <Membership *> *membershipData;
@end
MembershipPickerView.m
@implementation MembershipPickerview{
NSArray <Membership *> *membershipData;
}
-(instancetype)init{
self = [super init];
if (self) {
self.dataSource = self;
self.delegate = self;
[self updateDataSource];
}
return self;
}
- (void)updateDataSource{
Membership *m1 = [Membership new];
m1.mName = @"M1";
m1.mId = @"1";
Membership *m2 = [Membership new];
m1.mName = @"M2";
m1.mId = @"2";
membershipData = @[m1,m2];
[self reloadAllComponents];
}
- (NSInteger)numberOfComponentsInPickerView:(nonnull UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(nonnull UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return membershipData.count;
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return membershipData[row].mName;
}
@end
Have a view controller lets say vc1 that have a UITextfield in it named textField1
In my "vc1.m"
@implementation vc1 {
UITextField *textField1;
MembershipPickerview *picker;
}
-(void)viewDidLoad {
picker = [MembershipPickerview new];
textField1.inputView = picker;
textField1.delegate = self;
}
-(void)textFieldDidEndEditing:(UITextField *)textField{
NSInteger index = [picker selectedRowInComponent:0];
NSLog(@"%@",picker.membershipData[index].mName)
}
@end
My Questions
- Can i achieve the functionality that I'm doing in the textFieldDidEndEditing within the class and without setting the delegate of textfield to picker? If yes, How?
- Is it possible to get an event (textfield had resigned) in the Picker class without writing extra code in the other view controllers