Coder Social home page Coder Social logo

Comments (1)

code-K avatar code-K commented on May 26, 2024

hi @atomkirk

I've implemented it now by myself. It's maybe not the best way but is working!

Here's how:

  1. I needed to set the "elements" accessible in "MYSFormViewController.h" :
@property (nonatomic, strong) NSMutableArray      *elements;
  1. I needed to set the "visible" bool accessible in "MYSFormDatePickerElement.h" and "MYSFormPickerElement.h" (so i removed the 'readonly') :
@property (nonatomic, assign, getter = isVisible) BOOL visible;
  1. I add a NotificationCenter post in "formDatePickerCellRequestedDatePicker" and "formPickerCellRequestedPicker" of "MYSFormDatePickerElement.m" and "MYSFormPickerElement.m" :

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];
    }
}
  1. Lastly in my Controller add observer + method (This is SWIFT on my end) :
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,
C

from mysforms.

Related Issues (10)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.