We are really excited to announce today the release of Sensible TableView 2.0!
To us here, STV 2.0 is not just another normal STV release. We were just amazed by the results that some of customers who were beta testing 2.0 have showed us in their applications, and we think that we are all here on the verge of something truly revolutionary.
The major highlight of the STV 2.0 release is the ability to create your own custom cells, be it in code or in Interface Builder.
But that's barely the impressive part. The breakthrough here is that STV is able to work with your custom cells exactly as it works with its own cells! This means that you can just throw in any kind of controls you want (UITextFields, UITextViews, UISwitches, UISegmentedControls, etc.) into your cells, and STV will automatically bind these controls to your objects' properties (including Core Data!), just as it does with its own cells! As you might already realize, what you can do from here is only limited by your imagination. We had some customers going as far as creating full forms in a single cell, having STV automatically handle not just the data persistence for them, but also things like automatically resizing the table view and automatically moving from one text field to the other when the return button is tapped.
Other notable highlights of this release include:
* Core Data Ordering: Your Core Data items' order can now be automatically maintained by STV! All you need is just provide STV with an 'order' attribute and it will automatically store the order there for you, and update it whenever the items are rearranged.
* Custom detail views: No need to notify STV now when you present your own custom detail views, even if they contain other instances of STV!
* Search: In addition to STV providing its own automatic search functionality, you can now further filter its search results or completely provide your own search functions.
* In addition to the custom cell capability, you can now completely rearrange the controls in STV's standard cells via the
SCTableViewModelDelegate method called didLayoutSubViewsForRowAtIndexPath.
* SCDateCell now displays its picker in the same view instead of creating a detail view, which dramatically enhances the date selection user experience (detail view is still an option though).
* SCSelectionCell can now have a maximum number of selections (special thanks to Tommy Wild for the idea!)
* Enhanced Core Data filtering now in all STV objects via using predicates.
We would finally like to thank all of our customers for their indispensable input and support during STV 2.0 development, without which STV 2.0 would not exist. We would also like to thank them for their patience towards its final release days

Extra special thanks goes to (alphabetically):
Brendan Duddridge (
Tapforms)
Gary Edge (
panamind)
Geoffrey Alexander
Matthew Purcell (
iTeach)
Patrick Scheips
Tommy Wild
Thanks again everyone! Sensible TableView had already revolutionized table view development before, and with STV 2.0, we expect everything will be revolutionized all over again.
Tarek,
On behalf of the Sensible Cocoa team.
**Full change log
STV v2.0.0
*************
New! Added SCCustomPropertyDefinition class
SCTableViewModel changes:
* New! No need to call any special methods when displaying custom detail views
* Removed: -(void)pauseAutoResizeForKeyboard (now handled automatically)
* Removed: -(void)resumeAutoResizeForKeyboard (now handled automatically)
SCTableViewModelDataSource changes:
* New! -(void)tableViewModel:(SCTableViewModel *)tableViewModel sortSections:(NSMutableArray *)sectionsArray
* New! -(SCControlCell *)tableViewModel:(SCTableViewModel *)tableViewModel customCellForRowAtIndexPath:(NSIndexPath *)indexPath
* New! -(NSString *)tableViewModel:(SCTableViewModel *)tableViewModel customReuseIdentifierForRowAtIndexPath:(NSIndexPath *)indexPath
* New! -(NSArray *)tableViewModel:(SCTableViewModel *)tableViewModel customSearchResultForSearchText:(NSString *)searchText autoSearchResults:(NSArray *)autoSearchResults
SCTableViewModelDelegate changes:
* New! -(void *)tableViewModel:(SCTableViewModel *)tableViewModel detailModelCreatedForSectionAtIndex:(NSUInteger)index detailTableViewModel:(SCTableViewModel *)detailTableViewModel
* New! -(void *)tableViewModel:(SCTableViewModel *)tableViewModel detailModelCreatedForRowAtIndexPath:(NSIndexPath)indexPath detailTableViewModel:(SCTableViewModel *)detailTableViewModel
* New! -(void *)tableViewModel:(SCTableViewModel *)tableViewModel didLayoutSubviewsForCell:(SCTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
* New! -(void *)tableViewModel:(SCTableViewModel *)tableViewModel titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
* New! -(void *)tableViewModel:(SCTableViewModel *)tableViewModel didRemoveRowAtIndexPath:(NSIndexPath *)indexPath
* New! -(void *)tableViewModel:(SCArrayOfItemsModel *)tableViewModel sectionGenerated:(SCTableViewSection *)section atIndex:(NSInteger)index
SCArrayOfItemsModel changes:
* New! @property (nonatomic, readwrite) BOOL autoSelectNewItemCell
SCObjectSection changes:
* New! @property (nonatomic, readonly) SCClassDefinition *boundObjectClassDefinition
SCArrayOfItemsSection changes:
* New! @property (nonatomic, readwrite) BOOL autoSelectNewItemCell
SCSelectionSection changes:
* New! @property (nonatomic, readwrite) NSUInteger maximumSelections
* New! +(id)sectionWithHeaderTitle:(NSString *)sectionHeaderTitle withBoundKey:(NSString *)key withSelectionStringValue:(NSString *)selectionStringValue withItems:(NSArray *)sectionItems
* New! -(id)initWithHeaderTitle:(NSString *)sectionHeaderTitle withBoundKey:(NSString *)key withSelectionStringValue:(NSString *)selectionStringValue withItems:(NSArray *)sectionItems
SCTableViewCell changes:
* New! @property (nonatomic, readwrite) BOOL detailViewModal
* Update: boundObject property is now a 'retain' property (previously 'readonly')
* Update: boundPropertyName is now a 'retain' property (previously 'readonly')
* Update: boundKey is now a 'copy' property (previously 'readonly')
SCControlCell changes:
* New! SCControlCell now supports loading cells from Interface Builder nib files!
* New! @property (nonatomic, readonly) NSMutableDictionary *objectBindings
* New! @property (nonatomic, readonly) NSMutableDictionary *keyBindings
* New! + (id)cellWithText:(NSString *)cellText withBoundObject:(NSObject *)object withObjectBindings:(NSDictionary *)bindings withNibName:(NSString *)nibName
* New! + (id)cellWithText:(NSString *)cellText withKeyBindings:(NSDictionary *)bindings withNibName:(NSString *)nibName
* New! -(UIView *)controlWithTag:(NSInteger)controlTag
* New! -(NSObject *)boundValueForControlWithTag:(NSInteger)controlTag
* New! -(void *)commitValueForControlWithTag:(NSInteger)controlTag value:(NSObject *)controlValue
SCDateCell changes:
* New! SCDateCell now defaults to displaying the date picker in the current view
* New! @property (nonatomic, readwrite) BOOL displayDatePickerInDetailView
SCImagePickerCell changes:
* New! @property (nonatomic, copy) NSString *placeholderImageTitle
SCSelectionCell changes:
* New! @property (nonatomic, readwrite) NSUInteger maximumSelections
SCArrayOfObjectsCell changes:
* New! @property (nonatomic, readwrite) BOOL autoSelectNewItemCell
SCDateAttributes changes:
* New! +(id)attributesWithDateFormatter:(NSDateFormatter *)formatter datePickerMode:(UIDatePickerMode)mode displayDatePickerInDetailView:(BOOL)inDetailView
* New! -(id)initWithDateFormatter:(NSDateFormatter *)formatter datePickerMode:(UIDatePickerMode)mode displayDatePickerInDetailView:(BOOL)inDetailView
* New! @property (nonatomic, readwrite) UIDatePickerMode datePickerMode
* New! @property (nonatomic, readwrite) BOOL displayDatePickerInDetailView
SCSelectionAttributes changes:
* New! @property (nonatomic, readwrite) NSUInteger maximumSelections
SCObjectSelectionAttributes changes:
* New! @property (nonatomic, retain) NSPredicate *itemsPredicate
SCBadgeView changes:
* Update: color property is now a 'retain' property (originally copy)
SCClassDefinition changes:
* New! @property (nonatomic, copy) NSString *orderAttributeName
* New! -(BOOL)insertPropertyDefinition:(SCPropertyDefinition *)propertyDefinition atIndex:(NSInteger)index
SCViewController changes:
* New! @property (nonatomic, readonly) UIToolbar *buttonsToolbar
* New! @property (nonatomic, readonly) SCViewControllerState state
SCTableViewController changes:
* New! @property (nonatomic, readonly) UIToolbar *buttonsToolbar
* New! @property (nonatomic, readonly) SCViewControllerState state