В соответствии с моим требованием, мне нужен 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 без написания дополнительного кода в других контроллерах представления