Получите обратный вызов textFieldDidEndEditing UITextfield в пользовательском классе UIPicker - PullRequest
0 голосов
/ 19 февраля 2019

В соответствии с моим требованием, мне нужен UIPicker в нескольких разделах моего приложения с одним и тем же списком.Итак, я создаю собственный класс UIPicker, и до сих пор у меня не возникло никаких проблем, но я хотел бы улучшить одну вещь: в настоящее время я устанавливаю значение из метода делегата текстового поля, давайте рассмотрим пример: -

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

Наличие контроллера представления позволяет сказать vc1, который имеетUITextfield в нем с именем textField1

В моем "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

Мои вопросы

  1. Могу ли я достичьфункциональность, которую я делаю в textFieldDidEndEditing внутри класса и без установки делегата текстового поля для выбора?Если да, то как?
  2. Возможно ли получить событие (текстовое поле ушло) в классе Picker без написания дополнительного кода в других контроллерах представления
...