참고 : 이것은 기능 질문이 아닌 DESIGN 질문입니다. 나는 다음을 구현하는 방법을 이미 알고 있으며, 나는 그것을 설계하는 가장 좋은 방법을 찾아 내려고 노력하고있다.사용자 정의 inputViews를 사용하여 iOS 프로그램을 설계하는 방법
나는 애플 리케이션을 통해 UIViewControllers
몇 가지 UITextFields
UIDatePicker
입력보기를 가지고 iOS 애플 리케이션을 가지고. 이 코드는 다음과 같습니다 :
- (void) viewDidLoad
{
self.dateField.inputView = [self createDatePicker];
}
- (UIView *) createDatePicker
{
UIView *pickerView = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, TOOLBAR_HEIGHT + KEYBOARD_HEIGHT)];
UIDatePicker *picker = [[UIDatePicker alloc] init];
[picker sizeToFit];
picker.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
picker.datePickerMode = UIDatePickerModeDate;
[picker addTarget:self action:@selector(updateDateField:) forControlEvents:UIControlEventValueChanged];
[pickerView addSubview:picker];
// Create done button
UIToolbar* toolBar = [[UIToolbar alloc] init];
toolBar.barStyle = UIBarStyleBlackTranslucent;
toolBar.translucent = YES;
toolBar.tintColor = nil;
[toolBar sizeToFit];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:self
action:@selector(doneUsingPicker)];
[toolBar setItems:[NSArray arrayWithObjects:flexibleSpace, doneButton, nil]];
[pickerView addSubview:toolBar];
picker.frame = CGRectMake(0, toolBar.frame.size.height, self.view.frame.size.width, pickerView.frame.size.height - TOOLBAR_HEIGHT);
toolBar.frame = CGRectMake(0, 0, self.view.frame.size.width, TOOLBAR_HEIGHT);
return pickerView;
}
- (void) doneUsingPicker
{
[self.dateField resignFirstResponder];
}
- (void) updateDateField: (UIDatePicker *) datePicker
{
self.dateField.text = [self.formatter stringFromDate:datePicker.date];
}
문제는, 나는 UIDatePicker의 inputviews와 UITextFields가 다른 클래스에 응용 프로그램 전체에이 코드를 붙여 넣기하는 데 계속. 중복 코드를 최소화하기 위해이를 설계하는 가장 좋은 방법은 무엇입니까? 이 코드가 포함 된 UIDatePickerableViewController
수퍼 클래스가 있다고 생각했지만 확장 가능하지는 않습니다. 예를 들어, 곧 다른 유형의 입력보기가 텍스트 필드에 첨부 될 수 있다면 어떻게 될까요? 어떻게 설계해야합니까?