-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature request - PickerView close/collapse on tap #8
Comments
hi @atomkirk I've implemented it now by myself. It's maybe not the best way but is working! Here's how:
@property (nonatomic, strong) NSMutableArray *elements;
@property (nonatomic, assign, getter = isVisible) BOOL visible;
MYSFormDatePickerElement.m - (void)formDatePickerCellRequestedDatePicker:(MYSFormDatePickerCell *)cell
{
id value = [self.dataSource modelValueForFormElement:self];
self.datePicker.date = value ?: [NSDate date];
[[NSNotificationCenter defaultCenter] postNotificationName:@"pickerTapped" object:self];
if (!self.isVisible) {
self.visible = YES;
[self.delegate formElement:self didRequestPresentationOfChildView:self.datePicker];
}
else {
self.visible = NO;
[self.delegate formElement:self didRequestDismissalOfChildView:self.datePicker];
}
}
MYSFormPickerElement.m - (void)formPickerCellRequestedPicker:(MYSFormPickerCell *)cell
{
id value = [self.dataSource modelValueForFormElement:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"pickerTapped" object:self];
NSInteger index = [self.data indexOfObject:value];
if (index != NSNotFound) {
[self.pickerView selectRow:index inComponent:0 animated:YES];
}
if (!self.isVisible) {
self.visible = YES;
[self.delegate formElement:self didRequestPresentationOfChildView:self.pickerView];
}
else {
self.visible = NO;
[self.delegate formElement:self didRequestDismissalOfChildView:self.pickerView];
}
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.collectionView?.reloadData()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "pickerTapped:", name: "pickerTapped", object: nil)
} func pickerTapped(picker: AnyObject){
//
//println("pickerTapped")
//println(picker)
//loop through elements and check if it's picker? Then set all other pickers visible to false
for element in self.elements {
//println(element)
if (element.isKindOfClass(MYSFormDatePickerElement))
{
//println("is MYSFormDatePickerElement")
if picker.object as? MYSFormDatePickerElement != nil && picker.object as? MYSFormDatePickerElement != element as? MYSFormDatePickerElement {
//println(" PICKER IS MYSFormDatePickerElement")
//println("is not requested picker")
var newElement = element as MYSFormDatePickerElement
if newElement.visible == true
{
newElement.visible = false
newElement.delegate.formElement(newElement, didRequestDismissalOfChildView: newElement.datePicker)
}
}
}else if (element.isKindOfClass(MYSFormPickerElement))
{
//println("is MYSFormPickerElement")
if picker.object as? MYSFormPickerElement != nil && picker.object as? MYSFormPickerElement != element as? MYSFormPickerElement {
//println(" PICKER IS MYSFormPickerElement")
//println("is not requested picker")
var newElement = element as MYSFormPickerElement
if newElement.visible == true
{
newElement.visible = false
newElement.delegate.formElement(newElement, didRequestDismissalOfChildView: newElement.pickerView)
}
}
}
}
} This seems to work just fine... Please let me know if you'll implement a better solution... Thanks so much and best regards, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi there, please implement a possibility to easily "close/collapse" an picker element when selecting another picker element or even click anywhere else in the view.
Because currently when selecting "one" picker element and it's shown, and then select a "second" picker element, both are left open/visible and this takes much of screen size.
The text was updated successfully, but these errors were encountered: