CKTableCollectionViewController : Adds deselectRowAtIndexPath:animated:
Stylesheet : Ensure that if views are created by defining "subviews" : [ … ] in stylesheet, the styles are applied on newly created subviews.
Manages stickySelection in gridCollectionViewController.
Layout System : Much better layout preferred size for UITextView. Registers on text change notification and uses content size to compute the preferred size for a textView.
Layout Syatem : Tweak for UITextView first initialization.
Splitting the Layout System Code Base in several files.
UITextView Layout : Adjusting contentOffset when layouting textview.
Option Property Cell : Gives the ability to fully customize each option rows that are presented in the Option Table View using a cellController factory block that can be defined as a property of the CKOptionPropertyCellController or as an extended attribute of the edited property.

Example : We represent the fontName property of a PXInterTitle instance as a CKTableViewCellController.

As we define extended attributes with valuesAndLabels for this property, the resulting cell controller of cellControllerWithObject:keyPath: will be an instance of CKOptionPropertyCellController. The options that can be selected for this property will be represented by the cell controllers returned by the optionCellControllerCreationBlock defined in the property's extended attributes. So that, as we represent font names, each row will display the fontName by setting the right font on the UITableViewCell textLabel.

//Creating the cell controller that will get placed in a CKFormTableViewController

CKTableViewCellController* fontCell  = [CKTableViewCellController cellControllerWithObject:self.interTitle keyPath:@"fontName"];

//Defining the extended attributes for the PXInterTitle fontName property that will get used by CKOptionPropertyCellController for
//representing and editing this property.

@implementation PXInterTitle(Edition)

- (void)fontNameExtendedAttributes:(CKPropertyExtendedAttributes*)attributes{
    NSMutableDictionary* allFonts = [NSMutableDictionary dictionary];

    NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
    for (NSString* familyName in familyNames)
    {
        NSArray * fontNames = [[NSArray alloc] initWithArray:[UIFont fontNamesForFamilyName:familyName]];
        for(NSString* fontName in fontNames){
            [allFonts setObject:fontName forKey:fontName];
        }
    }

    attributes.valuesAndLabels = allFonts;
    attributes.sortingBlock = ^(id value1, NSString* label1,id value2, NSString* label2){
        return [label1 compare:label2];
    };

    attributes.optionCellControllerCreationBlock = ^(NSString* label, id value){
        CKTableViewCellController* cell = [CKTableViewCellController cellControllerWithTitle:label action:nil];
        [cell setSetupBlock:^(CKTableViewCellController *controller, UITableViewCell *cell) {
            NSString* fontName = (NSString*)value;
            cell.textLabel.font = [UIFont fontWithName:fontName size:14];
        }];
        return cell;
    };
}

@end
CKOptionPropertyCellController : Sets the CKOptionTableViewController name equals to the properties' key path edited by the CKOptionPropertyCellController. This allows to target this specific CKOptionTableViewController in stylesheet for customization.

"CKFormTableViewController[name=MyForm]" : {

     //this is a form with a row representing a property with options who's key path is "MyProperty" for example
     //We can now customize the option table view that will get presented when tapping on the "MyProperty" row as follow

     "CKOptionTableViewController[name=MyProperty]" :{
            //Customize the appearance of the option table view controller for "MyProperty" options here.
     }

}
CKGridCollectionViewController : Fixes the gris when calling setupWithCollection:factory: and the collection is already filled with data.
Adds Ability to customize separator line style (join, cap, dash lengths & phase) in CKStyleView.

Example of stylesheet :

            "backgroundView" : {
                    //Customizing background
                    "backgroundGradientColors" : [ "1 1 1 1", ".5 .5 .5 1" ],
                    "backgroundGradientLocations" : [ 0 , 1 ],

                    //Customizing separator
                    "separatorColor" : "yellowColor",
                    "separatorWidth" : 4,
                    "separatorDashLengths" : [ 10, 10 ],
                    "separatorDashPhase" : 5,
                    "separatorLineCap" : "kCGLineCapRound",
                    "separatorLineJoin" : "kCGLineJoinBevel",

                    //Customizing emboss
                    "embossTopColor" : "greenColor",
                    "embossBottomColor" : "blueColor",

                    //Customizing border
                    "borderColor" : "darkGrayColor",
                    "borderWidth" : 4,

                    //Customizing border shadow
                    "borderShadowColor" : "1 0 0 .5",
                    "borderShadowRadius" : 5,
                    "borderShadowOffset" : "5 5"
                },
Adds + (id)inflateViewFromStyleWithId:(NSString*)styleId on UIView.

Usage :

    This is useful if we want to use the power of stylesheet to define view hierarchy, layout and style and inflate these views using the definition from the stylesheet at runtime.

Here is an example we use in a project.

in a .style file :

    "$SoundMetaDataLayoutTemplate" : {
        "@class" : "UIView",

        "userInteractionEnabled" : 0,

        "autoresizingMask" : "UIViewAutoresizingFlexibleHeight",
        "sizeToFitLayoutBoxes" : 0,
        "layoutBoxes" : [{
            "@class" : "CKHorizontalBoxLayout", "padding" : "5 15 5 15",
            "layoutBoxes" : [
                { "@class" : "UIImageView", "name" : "ImageView", "maximumSize" : "20 20", "marginRight" : 10 },
                { "@class" : "CKVerticalBoxLayout",
                  "layoutBoxes" : [
                        { "@class" : "CKLayoutFlexibleSpace" },
                        { "@class" : "UILabel", "name" : "Title" },
                        { "@class" : "UILabel", "name" : "SubTitle"  },
                        { "@class" : "CKLayoutFlexibleSpace" }
                  ]
                }
            ]
        }],

        "UILabel[name=Title]" :{
            "text" : "Hello this is a sound !", "backgroundColor" : "clearColor"
        },

        "UILabel[name=SubTitle]" : {
            "text" : "SubTitle", "backgroundColor" : "clearColor"
        },

        "UIImageView[name=ImageView]" : {
            "backgroundColor" : "blueColor"
        }
    }

In the .m file when we need to create such view :

- (UIView*)newViewForSoundCueMetaData{
    return [UIView inflateViewFromStyleWithId:@"$SoundMetaDataLayoutTemplate"];
}
UIView + Layout : If the view doesn't have sub layout boxes, we uses sizeThatFits to compute the best size for the view. This allow to get the default OS metrics for all the controls (UIPageControl, UISlider, UISegmentedControl, …) without having to implement custom layout routines for each and metrics changes between OS version (ex. 6 to 7) will get automatically taken into account..
UIView + Layout : uses sizeThatFits for computing view size with no sub layout boxes only for controls as basic views must fit the free space compared to controls that have specific metrics.
Horizontal/Vertical layout : Avoids infinite sized views by limiting the preferred size to the parent size instead of MAXFLOAT.
UILabel + Layout : adds optional parameters to specify whether a label should fit to its content or is flexible in width/height.
By default it will fit in both direction of stretch in width in it is in a vertical layout (backward compatibility)
Fixes public API findAndApplyStyleFromStylesheet in CKStyleManager for views.
UIView+Layout : Padding on UIView was not taken into account when computing sub layout boxes layout.
Support for automatic size computation for CKTableViewCellController with layout or sizeBlock in carousel view controller.
Merge branch 'master' of github.com:wherecloud/AppCoreKit