Получите обратный вызов textFieldDidEndEditing UITextfield в пользовательском классе UIPicker
Согласно моему требованию, мне нужен 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
Мои вопросы
- Могу ли я достичь функциональности, которую я делаю в textFieldDidEndEditing внутри класса и без установки делегата текстового поля на сборщик? Если да, то как?
- Возможно ли получить событие (текстовое поле ушло в отставку) в классе Picker без написания дополнительного кода в других контроллерах представления