Get the UITextfield textFieldDidEndEditing callback in a custom UIPicker class

113 Views Asked by At

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

  1. 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?
  2. Is it possible to get an event (textfield had resigned) in the Picker class without writing extra code in the other view controllers
0

There are 0 best solutions below