Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ceca40bb06 | |||
| 8335af6d83 | |||
| 6cf22d3cf2 | |||
| cd5d983b1a | |||
| 870afc5660 | |||
| ded97b8328 | |||
| 74bde2185b | |||
| d299fe32cb | |||
| 234a135f08 | |||
| 0e5da84980 | |||
| 3dd39ed7bc | |||
| 45d363fb0c | |||
| 21f97ce9a6 | |||
| f2383b7903 | |||
| 6ac31155f8 | |||
| 151003d8e5 | |||
| b5bdda8e80 | |||
| 81aca9c49c | |||
| d8ece1410d | |||
| fdca5f7543 |
@@ -0,0 +1,13 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: xmartlabs # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
+2
-4
@@ -19,7 +19,5 @@ DerivedData
|
||||
|
||||
#CocoaPods
|
||||
Pods
|
||||
Tests/Pods
|
||||
Tests/Podfile.lock
|
||||
Examples/Objective-C/Podfile.lock
|
||||
Examples/Swift/Podfile.lock
|
||||
Podfile.lock
|
||||
*.xcworkspace
|
||||
|
||||
+3
-4
@@ -1,8 +1,7 @@
|
||||
language: objective-c
|
||||
osx_image: xcode9
|
||||
osx_image: xcode12
|
||||
before_install:
|
||||
- gem install cocoapods --no-rdoc --no-ri --no-document --quiet
|
||||
- gem install xcpretty --no-rdoc --no-ri --no-document --quiet
|
||||
- gem install cocoapods --quiet
|
||||
- gem install xcpretty --quiet
|
||||
- cd Tests && pod install && cd $TRAVIS_BUILD_DIR
|
||||
script: rake test
|
||||
|
||||
|
||||
+17
-1
@@ -1,6 +1,22 @@
|
||||
# Change Log
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
### Version 4.3.0:
|
||||
* Add datePicker style property to XLFormDateCell (#1078)
|
||||
|
||||
### Version 4.2.0:
|
||||
* Support for Swift Package Manager (#1073)
|
||||
* Fix Carthage build (#1075)
|
||||
|
||||
### Version 4.1.0:
|
||||
* Fix crash when .Nib is inside a framework bundle. (#1050)
|
||||
* iOS 13 dark mode support. (#1057)
|
||||
* Updates for Swift 5 in Examples
|
||||
|
||||
### Version 4.0.1:
|
||||
* Memory improvements and fixes.
|
||||
* Other minor fixes
|
||||
|
||||
### Version 4.0.0:
|
||||
* Adds support for Xcode 9.
|
||||
* Deprecated UIAlertView, UIActionSheet, UIPopoverController.
|
||||
@@ -137,6 +153,6 @@ All notable changes to this project will be documented in this file.
|
||||
* Added a convenience method to deselect a `XLFormRowDescriptor`. `-(void)deselectFormRow:(XLFormRowDescriptor *)row;`. [#33](https://github.com/xmartlabs/XLForm/issues/33 "#33").
|
||||
|
||||
|
||||
### Version 1.0.0
|
||||
### Version 1.0.0
|
||||
|
||||
* Initial release
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
// http://stackoverflow.com/questions/12580162/nsstring-to-nsdate-conversion-issue
|
||||
@interface CurrencyFormatter : NSNumberFormatter
|
||||
|
||||
@property (readonly) NSDecimalNumberHandler *roundingBehavior;
|
||||
@property (readonly, strong) NSDecimalNumberHandler *roundingBehavior;
|
||||
|
||||
@end
|
||||
|
||||
@@ -117,4 +117,4 @@
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
@end
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="p4n-1v-pzo">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14865.1" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="p4n-1v-pzo">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14819.2"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Navigation Controller-->
|
||||
@@ -11,9 +13,8 @@
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="p4n-1v-pzo" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="SNt-hk-N3V">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<rect key="frame" x="0.0" y="44" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
@@ -22,7 +23,7 @@
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="jqF-cF-u4f" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="117" y="56"/>
|
||||
<point key="canvasLocation" x="-3" y="38"/>
|
||||
</scene>
|
||||
<!--Others Form View Controller-->
|
||||
<scene sceneID="dyJ-7m-RaD">
|
||||
@@ -33,10 +34,9 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="HPb-Nx-E1G"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="wpr-wE-9nj">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||
<navigationItem key="navigationItem" id="Hf0-cB-ORN"/>
|
||||
@@ -46,7 +46,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="7YZ-ZR-X81" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1533" y="-233"/>
|
||||
<point key="canvasLocation" x="2221.739130434783" y="-156.02678571428569"/>
|
||||
</scene>
|
||||
<!--Native Event Form View Controller-->
|
||||
<scene sceneID="EjT-rm-U3h">
|
||||
@@ -57,17 +57,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="QuR-kY-o5R"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="tun-QW-CGC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="842"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="JY7-WL-SnH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="JY7-WL-SnH" firstAttribute="leading" secondItem="tun-QW-CGC" secondAttribute="leading" id="bSe-SV-rx6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="JY7-WL-SnH" secondAttribute="trailing" id="jLI-68-pSq"/>
|
||||
@@ -82,7 +80,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="zV0-mq-irv" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1120" y="-635"/>
|
||||
<point key="canvasLocation" x="1623.1884057971015" y="-425.22321428571428"/>
|
||||
</scene>
|
||||
<!--Examples-->
|
||||
<scene sceneID="wf7-ha-lXx">
|
||||
@@ -93,17 +91,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="0bE-2H-tqE"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="PO9-pF-A7O">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="Lxj-Sb-kC6">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="0.0" y="88" width="414" height="774"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Lxj-Sb-kC6" firstAttribute="top" secondItem="kOR-67-djF" secondAttribute="bottom" id="PT1-Xo-3Ql"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Lxj-Sb-kC6" secondAttribute="trailing" id="brq-yF-WM8"/>
|
||||
@@ -125,7 +121,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="1V5-DZ-WfF" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="527" y="56"/>
|
||||
<point key="canvasLocation" x="763.768115942029" y="37.5"/>
|
||||
</scene>
|
||||
<!--Blog Example View Controller-->
|
||||
<scene sceneID="Vn0-9y-5bc">
|
||||
@@ -136,17 +132,16 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="scM-da-Sg0"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="hrV-fb-58s">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||
<navigationItem key="navigationItem" id="RJB-cz-SnF"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Fvo-wr-5Ca" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="167" y="1151"/>
|
||||
<point key="canvasLocation" x="242.0289855072464" y="770.75892857142856"/>
|
||||
</scene>
|
||||
<!--Validation Examples-->
|
||||
<scene sceneID="z2I-Nk-y9W">
|
||||
@@ -157,17 +152,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="xtJ-Wo-mhU"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="1Ol-Ra-Ysg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="Fty-3j-BeF">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="0.0" y="24" width="414" height="838"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="xtJ-Wo-mhU" firstAttribute="top" secondItem="Fty-3j-BeF" secondAttribute="bottom" id="CbV-4f-RzP"/>
|
||||
<constraint firstItem="Fty-3j-BeF" firstAttribute="top" secondItem="AG9-N9-2qp" secondAttribute="bottom" constant="-64" id="Pdw-VG-qcc"/>
|
||||
@@ -184,7 +177,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="VFT-Og-STO" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="566" y="938"/>
|
||||
<point key="canvasLocation" x="820.28985507246387" y="628.125"/>
|
||||
</scene>
|
||||
<!--Predicate Form View Controller-->
|
||||
<scene sceneID="a9p-C8-g8y">
|
||||
@@ -195,17 +188,16 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="Lsg-dH-McH"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="6EZ-O7-FjX">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||
<navigationItem key="navigationItem" id="Lsd-xH-7IN"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="rZL-10-YZn" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="956" y="924"/>
|
||||
<point key="canvasLocation" x="1385.5072463768117" y="618.75"/>
|
||||
</scene>
|
||||
<!--Selectors Form View Controller-->
|
||||
<scene sceneID="KYK-TX-8rm">
|
||||
@@ -216,10 +208,9 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="CTu-Y5-7Qw"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="bNj-SD-83w">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||
<navigationItem key="navigationItem" id="Buo-Af-6Q1"/>
|
||||
@@ -229,7 +220,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="8fu-YK-6qz" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1346" y="533"/>
|
||||
<point key="canvasLocation" x="1950.7246376811595" y="356.91964285714283"/>
|
||||
</scene>
|
||||
<!--Map View Controller-->
|
||||
<scene sceneID="tAS-lK-35t">
|
||||
@@ -240,17 +231,16 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="cgQ-Vs-ICN"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="JjC-E5-SyY">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||
<navigationItem key="navigationItem" id="BjG-Bq-0lD"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="LmS-YR-mFY" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1789" y="533"/>
|
||||
<point key="canvasLocation" x="2592.753623188406" y="356.91964285714283"/>
|
||||
</scene>
|
||||
<!--Native Event Navigation View Controller-->
|
||||
<scene sceneID="mNb-be-ApA">
|
||||
@@ -258,9 +248,8 @@
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="K9D-4c-9eZ" customClass="NativeEventNavigationViewController" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="fO3-V7-XXu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
@@ -269,7 +258,7 @@
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="eqB-vl-BzH" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="586" y="-654"/>
|
||||
<point key="canvasLocation" x="849.27536231884062" y="-437.94642857142856"/>
|
||||
</scene>
|
||||
<!--Basic Predicate View Controller-->
|
||||
<scene sceneID="pD4-sm-x3a">
|
||||
@@ -280,17 +269,16 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="2b4-gN-85p"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="NZg-t1-g19">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||
<navigationItem key="navigationItem" id="1lh-jZ-lIV"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Tlw-q2-pcu" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-159" y="1151"/>
|
||||
<point key="canvasLocation" x="-230.43478260869566" y="770.75892857142856"/>
|
||||
</scene>
|
||||
<!--Users Table View Controller-->
|
||||
<scene sceneID="lGi-0L-kUk">
|
||||
@@ -301,17 +289,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="uVG-bI-IMr"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="sMH-hT-NCg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView autoresizesSubviews="NO" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="fLo-Gu-rqr">
|
||||
<rect key="frame" x="0.0" y="20" width="320" height="548"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="uVG-bI-IMr" firstAttribute="top" secondItem="fLo-Gu-rqr" secondAttribute="bottom" id="25A-HG-wek"/>
|
||||
<constraint firstItem="fLo-Gu-rqr" firstAttribute="top" secondItem="at2-Ds-EcY" secondAttribute="bottom" id="3N4-a2-LLf"/>
|
||||
@@ -326,7 +312,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="flB-2M-8zS" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1346" y="1178"/>
|
||||
<point key="canvasLocation" x="1950.7246376811595" y="788.83928571428567"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<inferredMetricsTieBreakers>
|
||||
|
||||
@@ -43,7 +43,7 @@ PODS:
|
||||
- XLData/RemoteDataStore (2.0.0):
|
||||
- XLData/CoreRemote
|
||||
- XLData/DataStore
|
||||
- XLForm (4.0.0)
|
||||
- XLForm (4.3.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- AFNetworking (~> 2.0)
|
||||
@@ -53,12 +53,19 @@ DEPENDENCIES:
|
||||
- XLData (from `https://github.com/xmartlabs/XLData.git`, commit `1f9019b56242a2019c7f7e11ec4ef823c397ebcf`)
|
||||
- XLForm (from `../../`)
|
||||
|
||||
SPEC REPOS:
|
||||
https://github.com/CocoaPods/Specs.git:
|
||||
- AFNetworking
|
||||
- AXRatingView
|
||||
- JVFloatLabeledTextField
|
||||
- SHSPhoneComponent
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
XLData:
|
||||
:commit: 1f9019b56242a2019c7f7e11ec4ef823c397ebcf
|
||||
:git: https://github.com/xmartlabs/XLData.git
|
||||
XLForm:
|
||||
:path: ../../
|
||||
:path: "../../"
|
||||
|
||||
CHECKOUT OPTIONS:
|
||||
XLData:
|
||||
@@ -71,8 +78,8 @@ SPEC CHECKSUMS:
|
||||
JVFloatLabeledTextField: 58a3a32cfb800e5b224f676987e7c13abf50a14d
|
||||
SHSPhoneComponent: 4cec0653a150ad63cbc52b0c8b29ce2d3c9c26f0
|
||||
XLData: df725c6179e2e0c80bf56a1ecad9afd169707a6d
|
||||
XLForm: 04110197c12187dd28a6c7295d3d8b95f4fdb4de
|
||||
XLForm: a439f9512078ed538e8335c8b06d3f3286bbfd37
|
||||
|
||||
PODFILE CHECKSUM: 64fbcd03a2c13762b2c18e3938cc8008807937c9
|
||||
|
||||
COCOAPODS: 1.3.1
|
||||
COCOAPODS: 1.11.3
|
||||
|
||||
@@ -486,7 +486,6 @@
|
||||
2850C5F418D0F706002B7D0A /* Sources */,
|
||||
2850C5F518D0F706002B7D0A /* Frameworks */,
|
||||
2850C5F618D0F706002B7D0A /* Resources */,
|
||||
32EB30E0A90A4E91864B1D3C /* [CP] Embed Pods Frameworks */,
|
||||
DE3D12F5596780A66C6C3D4A /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
@@ -504,7 +503,7 @@
|
||||
2850C5F018D0F706002B7D0A /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0900;
|
||||
LastUpgradeCheck = 1100;
|
||||
ORGANIZATIONNAME = Xmartlabs;
|
||||
};
|
||||
buildConfigurationList = 2850C5F318D0F706002B7D0A /* Build configuration list for PBXProject "XLForm" */;
|
||||
@@ -512,6 +511,7 @@
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
English,
|
||||
en,
|
||||
);
|
||||
mainGroup = 2850C5EF18D0F706002B7D0A;
|
||||
@@ -542,37 +542,22 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
32EB30E0A90A4E91864B1D3C /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-XLForm/Pods-XLForm-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
DE3D12F5596780A66C6C3D4A /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${SRCROOT}/Pods/Target Support Files/Pods-XLForm/Pods-XLForm-resources.sh",
|
||||
"${PODS_ROOT}/Target Support Files/Pods-XLForm/Pods-XLForm-resources.sh",
|
||||
"${PODS_ROOT}/../../../XLForm/XLForm.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/XLForm.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-XLForm/Pods-XLForm-resources.sh\"\n";
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-XLForm/Pods-XLForm-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
EBE0335CCC7588D83B89A92A /* [CP] Check Pods Manifest.lock */ = {
|
||||
@@ -660,6 +645,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
@@ -668,12 +654,14 @@
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
@@ -710,6 +698,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
@@ -718,12 +707,14 @@
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "20x20",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "20x20",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
@@ -48,6 +58,16 @@
|
||||
"size" : "60x60",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "20x20",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "20x20",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "29x29",
|
||||
@@ -101,8 +121,13 @@
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "car",
|
||||
"size" : "120x120",
|
||||
"idiom" : "ipad",
|
||||
"size" : "83.5x83.5",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ios-marketing",
|
||||
"size" : "1024x1024",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
@@ -142,8 +167,15 @@
|
||||
"size" : "44x44",
|
||||
"idiom" : "watch",
|
||||
"scale" : "2x",
|
||||
"role" : "longLook",
|
||||
"subtype" : "42mm"
|
||||
"role" : "appLauncher",
|
||||
"subtype" : "40mm"
|
||||
},
|
||||
{
|
||||
"size" : "50x50",
|
||||
"idiom" : "watch",
|
||||
"scale" : "2x",
|
||||
"role" : "appLauncher",
|
||||
"subtype" : "44mm"
|
||||
},
|
||||
{
|
||||
"size" : "86x86",
|
||||
@@ -158,6 +190,30 @@
|
||||
"scale" : "2x",
|
||||
"role" : "quickLook",
|
||||
"subtype" : "42mm"
|
||||
},
|
||||
{
|
||||
"size" : "108x108",
|
||||
"idiom" : "watch",
|
||||
"scale" : "2x",
|
||||
"role" : "quickLook",
|
||||
"subtype" : "44mm"
|
||||
},
|
||||
{
|
||||
"idiom" : "watch-marketing",
|
||||
"size" : "1024x1024",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "car",
|
||||
"size" : "120x120",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "44x44",
|
||||
"idiom" : "watch",
|
||||
"scale" : "2x",
|
||||
"role" : "longLook",
|
||||
"subtype" : "42mm"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
|
||||
@@ -360,7 +360,6 @@
|
||||
2847A69A1AAF2679000A2ABE /* Sources */,
|
||||
2847A69B1AAF2679000A2ABE /* Frameworks */,
|
||||
2847A69C1AAF2679000A2ABE /* Resources */,
|
||||
9BD9BF77E99A8DF4A44D2DB8 /* [CP] Embed Pods Frameworks */,
|
||||
DC50100813F1902A0CFCE009 /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
@@ -380,18 +379,18 @@
|
||||
attributes = {
|
||||
LastSwiftMigration = 0700;
|
||||
LastSwiftUpdateCheck = 0700;
|
||||
LastUpgradeCheck = 0900;
|
||||
LastUpgradeCheck = 1200;
|
||||
ORGANIZATIONNAME = Xmartlabs;
|
||||
TargetAttributes = {
|
||||
2847A69D1AAF2679000A2ABE = {
|
||||
CreatedOnToolsVersion = 6.2;
|
||||
LastSwiftMigration = 0900;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 2847A6991AAF2679000A2ABE /* Build configuration list for PBXProject "SwiftExample" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
@@ -441,37 +440,22 @@
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
9BD9BF77E99A8DF4A44D2DB8 /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
DC50100813F1902A0CFCE009 /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-resources.sh",
|
||||
"${PODS_ROOT}/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-resources.sh",
|
||||
"${PODS_ROOT}/../../../XLForm/XLForm.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/XLForm.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-resources.sh\"\n";
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
@@ -518,6 +502,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
@@ -526,14 +511,17 @@
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
@@ -571,6 +559,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
@@ -579,14 +568,17 @@
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
@@ -625,7 +617,7 @@
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "SwiftExample/SwiftExample-Bridging-Header.h";
|
||||
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
|
||||
SWIFT_VERSION = 4.0;
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -641,7 +633,7 @@
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "SwiftExample/SwiftExample-Bridging-Header.h";
|
||||
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
|
||||
SWIFT_VERSION = 4.0;
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
||||
@@ -14,12 +14,12 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
var window: UIWindow?
|
||||
|
||||
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
|
||||
// Declare custom rows
|
||||
XLFormViewController.cellClassesForRowDescriptorTypes()[XLFormRowDescriptorTypeRate] = "XLFormRatingCell"
|
||||
XLFormViewController.cellClassesForRowDescriptorTypes()[XLFormRowDescriptorTypeRate] = NSStringFromClass(XLFormRatingCell.self)
|
||||
XLFormViewController.cellClassesForRowDescriptorTypes()[XLFormRowDescriptorTypeFloatLabeledTextField] = FloatLabeledTextFieldCell.self
|
||||
XLFormViewController.cellClassesForRowDescriptorTypes()[XLFormRowDescriptorTypeWeekDays] = "XLFormWeekDaysCell"
|
||||
XLFormViewController.cellClassesForRowDescriptorTypes()[XLFormRowDescriptorTypeWeekDays] = NSStringFromClass(XLFormWeekDaysCell.self)
|
||||
XLFormViewController.cellClassesForRowDescriptorTypes()[XLFormRowDescriptorTypeSegmentedInline] = InlineSegmentedCell.self
|
||||
XLFormViewController.cellClassesForRowDescriptorTypes()[XLFormRowDescriptorTypeSegmentedControl] = InlineSegmentedControl.self
|
||||
XLFormViewController.inlineRowDescriptorTypesForRowDescriptorTypes()[XLFormRowDescriptorTypeSegmentedInline] = XLFormRowDescriptorTypeSegmentedControl
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ class FloatLabeledTextFieldCell : XLFormBaseCell, UITextFieldDelegate {
|
||||
override func update() {
|
||||
super.update()
|
||||
if let rowDescriptor = rowDescriptor {
|
||||
floatLabeledTextField.attributedPlaceholder = NSAttributedString(string: rowDescriptor.title ?? "" , attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray])
|
||||
floatLabeledTextField.attributedPlaceholder = NSAttributedString(string: rowDescriptor.title ?? "" , attributes: [NSAttributedString.Key.foregroundColor: UIColor.lightGray])
|
||||
if let value = rowDescriptor.value {
|
||||
floatLabeledTextField.text = (value as AnyObject).displayText()
|
||||
}
|
||||
|
||||
+3
-3
@@ -88,7 +88,7 @@ class InlineSegmentedControl : XLFormBaseCell, XLFormInlineRowDescriptorCell {
|
||||
|
||||
var inlineRowDescriptor : XLFormRowDescriptor?
|
||||
lazy var segmentedControl : UISegmentedControl = {
|
||||
return UISegmentedControl.autolayoutView() as! UISegmentedControl
|
||||
return UISegmentedControl.autolayout()
|
||||
}()
|
||||
|
||||
override func configure() {
|
||||
@@ -118,7 +118,7 @@ class InlineSegmentedControl : XLFormBaseCell, XLFormInlineRowDescriptorCell {
|
||||
func getItems() -> NSMutableArray {
|
||||
let result = NSMutableArray()
|
||||
for option in inlineRowDescriptor!.selectorOptions! {
|
||||
result.add((option as AnyObject).displayText())
|
||||
result.add((option as AnyObject).displayText() ?? "")
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -135,7 +135,7 @@ class InlineSegmentedControl : XLFormBaseCell, XLFormInlineRowDescriptorCell {
|
||||
if let value = formRow?.value as? NSObject {
|
||||
for option in (formRow?.selectorOptions)! {
|
||||
if ((option as! NSObject).valueData() as AnyObject) === (value.valueData() as AnyObject) {
|
||||
return formRow?.selectorOptions?.index(where: { ($0 as! NSObject) == (option as! NSObject) } ) ?? -1
|
||||
return formRow?.selectorOptions?.firstIndex(where: { ($0 as! NSObject) == (option as! NSObject) } ) ?? -1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ class XLFormWeekDaysCell : XLFormBaseCell {
|
||||
func configureButtons() {
|
||||
for subview in contentView.subviews {
|
||||
if let button = subview as? UIButton {
|
||||
button.setImage(UIImage(named: "uncheckedDay"), for: UIControlState())
|
||||
button.setImage(UIImage(named: "uncheckedDay"), for: UIControl.State())
|
||||
button.setImage(UIImage(named: "checkedDay"), for: .selected)
|
||||
button.adjustsImageWhenHighlighted = false
|
||||
imageTopTitleBottom(button)
|
||||
@@ -120,7 +120,7 @@ class XLFormWeekDaysCell : XLFormBaseCell {
|
||||
}
|
||||
|
||||
func updateButtons() {
|
||||
var value = rowDescriptor!.value as! Dictionary<String, Bool>
|
||||
let value = rowDescriptor!.value as! Dictionary<String, Bool>
|
||||
|
||||
sundayButton.isSelected = value[kWeekDay.sunday.description()]!
|
||||
mondayButton.isSelected = value[kWeekDay.monday.description()]!
|
||||
@@ -150,8 +150,8 @@ class XLFormWeekDaysCell : XLFormBaseCell {
|
||||
|
||||
// raise the image and push it right so it appears centered
|
||||
// above the text
|
||||
let titleSize : CGSize = (button.titleLabel!.text! as NSString).size(withAttributes: [NSAttributedStringKey.font: button.titleLabel!.font])
|
||||
button.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + spacing), 0.0, 0.0, -titleSize.width)
|
||||
let titleSize : CGSize = (button.titleLabel!.text! as NSString).size(withAttributes: [NSAttributedString.Key.font: button.titleLabel!.font as Any])
|
||||
button.imageEdgeInsets = UIEdgeInsets.init(top: -(titleSize.height + spacing), left: 0.0, bottom: 0.0, right: -titleSize.width)
|
||||
}
|
||||
|
||||
func getDayFormButton(_ button: UIButton) -> String {
|
||||
|
||||
+3
-3
@@ -42,7 +42,7 @@ class MapViewController : UIViewController, XLFormRowDescriptorViewController, M
|
||||
var rowDescriptor: XLFormRowDescriptor?
|
||||
lazy var mapView : MKMapView = { [unowned self] in
|
||||
let mapView = MKMapView(frame: self.view.frame)
|
||||
mapView.autoresizingMask = [UIViewAutoresizing.flexibleHeight, UIViewAutoresizing.flexibleWidth]
|
||||
mapView.autoresizingMask = [UIView.AutoresizingMask.flexibleHeight, UIView.AutoresizingMask.flexibleWidth]
|
||||
return mapView
|
||||
}()
|
||||
|
||||
@@ -73,14 +73,14 @@ class MapViewController : UIViewController, XLFormRowDescriptorViewController, M
|
||||
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
|
||||
|
||||
let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "annotation")
|
||||
pinAnnotationView.pinColor = MKPinAnnotationColor.red
|
||||
pinAnnotationView.pinTintColor = .red
|
||||
pinAnnotationView.isDraggable = true
|
||||
pinAnnotationView.animatesDrop = true
|
||||
return pinAnnotationView
|
||||
}
|
||||
|
||||
|
||||
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) {
|
||||
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationView.DragState, fromOldState oldState: MKAnnotationView.DragState) {
|
||||
if (newState == .ending){
|
||||
if let rowDescriptor = rowDescriptor, let annotation = view.annotation {
|
||||
rowDescriptor.value = CLLocation(latitude:annotation.coordinate.latitude, longitude:annotation.coordinate.longitude)
|
||||
|
||||
@@ -141,7 +141,7 @@ class DatesFormViewController: XLFormViewController {
|
||||
|
||||
// DatePicker
|
||||
row = XLFormRowDescriptor(tag: Tags.DatePicker, rowType:XLFormRowDescriptorTypeDatePicker)
|
||||
row.cellConfigAtConfigure["datePicker.datePickerMode"] = UIDatePickerMode.date.rawValue
|
||||
row.cellConfigAtConfigure["datePicker.datePickerMode"] = UIDatePicker.Mode.date.rawValue
|
||||
row.value = Date()
|
||||
section.addFormRow(row)
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class UserCell : UITableViewCell {
|
||||
return tempUserName
|
||||
}()
|
||||
|
||||
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||
// Initialization code
|
||||
|
||||
@@ -67,7 +67,7 @@ class UserCell : UITableViewCell {
|
||||
let metrics = [ "imgSize": 50.0, "margin": 12.0]
|
||||
|
||||
var result = NSLayoutConstraint.constraints(withVisualFormat: "H:|-(margin)-[image(imgSize)]-[name]", options:.alignAllTop, metrics: metrics, views: views)
|
||||
result += NSLayoutConstraint.constraints(withVisualFormat: "V:|-(margin)-[image(imgSize)]", options:NSLayoutFormatOptions(), metrics:metrics, views: views)
|
||||
result += NSLayoutConstraint.constraints(withVisualFormat: "V:|-(margin)-[image(imgSize)]", options:NSLayoutConstraint.FormatOptions(), metrics:metrics, views: views)
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ class UsersTableViewController : UITableViewController, XLFormRowDescriptorViewC
|
||||
fileprivate let kUserCellIdentifier = "UserCell"
|
||||
|
||||
|
||||
override init(style: UITableViewStyle) {
|
||||
override init(style: UITableView.Style) {
|
||||
super.init(style: style);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ let XLFormRowDescriptorTypeCustom = "XLFormRowDescriptorTypeCustom"
|
||||
|
||||
class XLFormCustomCell : XLFormBaseCell {
|
||||
|
||||
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ class OthersFormViewController : XLFormViewController {
|
||||
row = XLFormRowDescriptor(tag: Tags.ButtonLeftAligned, rowType: XLFormRowDescriptorTypeButton, title: "Button with Block")
|
||||
row.cellConfig["textLabel.textColor"] = UIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)
|
||||
row.cellConfig["textLabel.textAlignment"] = NSTextAlignment.left.rawValue
|
||||
row.cellConfig["accessoryType"] = UITableViewCellAccessoryType.disclosureIndicator.rawValue
|
||||
row.cellConfig["accessoryType"] = UITableViewCell.AccessoryType.disclosureIndicator.rawValue
|
||||
row.action.formBlock = { [weak self] (sender: XLFormRowDescriptor!) -> Void in
|
||||
let switchRow = sender.sectionDescriptor.formDescriptor!.formRow(withTag: Tags.SwitchBool)!
|
||||
if let value = switchRow.value , (value as AnyObject).boolValue == true {
|
||||
|
||||
@@ -82,12 +82,12 @@ class NativeEventFormViewController : XLFormViewController {
|
||||
row = XLFormRowDescriptor(tag: "repeat", rowType:XLFormRowDescriptorTypeSelectorPush, title:"Repeat")
|
||||
row.value = XLFormOptionsObject(value: 0, displayText: "Never")
|
||||
row.selectorTitle = "Repeat"
|
||||
row.selectorOptions = [XLFormOptionsObject(value: 0, displayText: "Never"),
|
||||
XLFormOptionsObject(value: 1, displayText: "Every Day"),
|
||||
XLFormOptionsObject(value: 2, displayText: "Every Week"),
|
||||
XLFormOptionsObject(value: 3, displayText: "Every 2 Weeks"),
|
||||
XLFormOptionsObject(value: 4, displayText: "Every Month"),
|
||||
XLFormOptionsObject(value: 5, displayText: "Every Year")]
|
||||
row.selectorOptions = [XLFormOptionsObject(value: 0, displayText: "Never")!,
|
||||
XLFormOptionsObject(value: 1, displayText: "Every Day")!,
|
||||
XLFormOptionsObject(value: 2, displayText: "Every Week")!,
|
||||
XLFormOptionsObject(value: 3, displayText: "Every 2 Weeks")!,
|
||||
XLFormOptionsObject(value: 4, displayText: "Every Month")!,
|
||||
XLFormOptionsObject(value: 5, displayText: "Every Year")!]
|
||||
section.addFormRow(row)
|
||||
|
||||
section = XLFormSectionDescriptor.formSection()
|
||||
@@ -98,15 +98,15 @@ class NativeEventFormViewController : XLFormViewController {
|
||||
row.value = XLFormOptionsObject(value: 0, displayText: "None")
|
||||
row.selectorTitle = "Event Alert"
|
||||
row.selectorOptions = [
|
||||
XLFormOptionsObject(value: 0, displayText: "None"),
|
||||
XLFormOptionsObject(value: 1, displayText: "At time of event"),
|
||||
XLFormOptionsObject(value: 2, displayText: "5 minutes before"),
|
||||
XLFormOptionsObject(value: 3, displayText: "15 minutes before"),
|
||||
XLFormOptionsObject(value: 4, displayText: "30 minutes before"),
|
||||
XLFormOptionsObject(value: 5, displayText: "1 hour before"),
|
||||
XLFormOptionsObject(value: 6, displayText: "2 hours before"),
|
||||
XLFormOptionsObject(value: 7, displayText: "1 day before"),
|
||||
XLFormOptionsObject(value: 8, displayText: "2 days before")]
|
||||
XLFormOptionsObject(value: 0, displayText: "None")!,
|
||||
XLFormOptionsObject(value: 1, displayText: "At time of event")!,
|
||||
XLFormOptionsObject(value: 2, displayText: "5 minutes before")!,
|
||||
XLFormOptionsObject(value: 3, displayText: "15 minutes before")!,
|
||||
XLFormOptionsObject(value: 4, displayText: "30 minutes before")!,
|
||||
XLFormOptionsObject(value: 5, displayText: "1 hour before")!,
|
||||
XLFormOptionsObject(value: 6, displayText: "2 hours before")!,
|
||||
XLFormOptionsObject(value: 7, displayText: "1 day before")!,
|
||||
XLFormOptionsObject(value: 8, displayText: "2 days before")!]
|
||||
section.addFormRow(row)
|
||||
|
||||
|
||||
@@ -117,8 +117,8 @@ class NativeEventFormViewController : XLFormViewController {
|
||||
row = XLFormRowDescriptor(tag: "showAs", rowType:XLFormRowDescriptorTypeSelectorPush, title:"Show As")
|
||||
row.value = XLFormOptionsObject(value: 0, displayText: "Busy")
|
||||
row.selectorTitle = "Show As"
|
||||
row.selectorOptions = [XLFormOptionsObject(value: 0, displayText:"Busy"),
|
||||
XLFormOptionsObject(value: 1, displayText:"Free")]
|
||||
row.selectorOptions = [XLFormOptionsObject(value: 0, displayText:"Busy")!,
|
||||
XLFormOptionsObject(value: 1, displayText:"Free")!]
|
||||
section.addFormRow(row)
|
||||
|
||||
section = XLFormSectionDescriptor.formSection()
|
||||
@@ -197,7 +197,7 @@ class NativeEventFormViewController : XLFormViewController {
|
||||
// startDateDescriptor is later than endDateDescriptor
|
||||
dateEndCell.update()
|
||||
let newDetailText = dateEndCell.detailTextLabel!.text!
|
||||
let strikeThroughAttribute = [NSAttributedStringKey.strikethroughStyle : NSUnderlineStyle.styleSingle.rawValue]
|
||||
let strikeThroughAttribute = [NSAttributedString.Key.strikethroughStyle : NSUnderlineStyle.single.rawValue]
|
||||
let strikeThroughText = NSAttributedString(string: newDetailText, attributes: strikeThroughAttribute)
|
||||
endDateDescriptor.cellConfig["detailTextLabel.attributedText"] = strikeThroughText
|
||||
updateFormRow(endDateDescriptor)
|
||||
|
||||
@@ -129,11 +129,11 @@ class SelectorsFormViewController : XLFormViewController {
|
||||
|
||||
// Selector Push
|
||||
row = XLFormRowDescriptor(tag: Tags.Push, rowType:XLFormRowDescriptorTypeSelectorPush, title:"Push")
|
||||
row.selectorOptions = [XLFormOptionsObject(value: 0, displayText: "Option 1"),
|
||||
XLFormOptionsObject(value: 1, displayText:"Option 2"),
|
||||
XLFormOptionsObject(value: 2, displayText:"Option 3"),
|
||||
XLFormOptionsObject(value: 3, displayText:"Option 4"),
|
||||
XLFormOptionsObject(value: 4, displayText:"Option 5")
|
||||
row.selectorOptions = [XLFormOptionsObject(value: 0, displayText: "Option 1")!,
|
||||
XLFormOptionsObject(value: 1, displayText:"Option 2")!,
|
||||
XLFormOptionsObject(value: 2, displayText:"Option 3")!,
|
||||
XLFormOptionsObject(value: 3, displayText:"Option 4")!,
|
||||
XLFormOptionsObject(value: 4, displayText:"Option 5")!
|
||||
]
|
||||
row.value = XLFormOptionsObject(value: 1, displayText:"Option 2")
|
||||
section.addFormRow(row)
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="14F1021" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="p4n-1v-pzo">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14865.1" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="p4n-1v-pzo">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14819.2"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Navigation Controller-->
|
||||
@@ -11,7 +13,7 @@
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="p4n-1v-pzo" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="SNt-hk-N3V">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<rect key="frame" x="0.0" y="44" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
@@ -21,7 +23,7 @@
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="jqF-cF-u4f" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="117" y="56"/>
|
||||
<point key="canvasLocation" x="-107" y="43"/>
|
||||
</scene>
|
||||
<!--Others Form View Controller-->
|
||||
<scene sceneID="dyJ-7m-RaD">
|
||||
@@ -32,9 +34,9 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="HPb-Nx-E1G"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="wpr-wE-9nj">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Hf0-cB-ORN"/>
|
||||
<connections>
|
||||
@@ -43,7 +45,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="7YZ-ZR-X81" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1533" y="-233"/>
|
||||
<point key="canvasLocation" x="2221.739130434783" y="-156.02678571428569"/>
|
||||
</scene>
|
||||
<!--Native Event Form View Controller-->
|
||||
<scene sceneID="EjT-rm-U3h">
|
||||
@@ -54,15 +56,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="QuR-kY-o5R"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="tun-QW-CGC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="842"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="JY7-WL-SnH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
|
||||
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="JY7-WL-SnH" firstAttribute="leading" secondItem="tun-QW-CGC" secondAttribute="leading" id="bSe-SV-rx6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="JY7-WL-SnH" secondAttribute="trailing" id="jLI-68-pSq"/>
|
||||
@@ -77,7 +79,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="zV0-mq-irv" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1120" y="-635"/>
|
||||
<point key="canvasLocation" x="1623.1884057971015" y="-425.22321428571428"/>
|
||||
</scene>
|
||||
<!--Examples-->
|
||||
<scene sceneID="wf7-ha-lXx">
|
||||
@@ -88,20 +90,20 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="0bE-2H-tqE"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="PO9-pF-A7O">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="Lxj-Sb-kC6">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<rect key="frame" x="0.0" y="88" width="414" height="774"/>
|
||||
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Lxj-Sb-kC6" firstAttribute="top" secondItem="kOR-67-djF" secondAttribute="bottom" id="PT1-Xo-3Ql"/>
|
||||
<constraint firstItem="Lxj-Sb-kC6" firstAttribute="top" secondItem="kOR-67-djF" secondAttribute="bottom" id="R5O-as-LEG"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Lxj-Sb-kC6" secondAttribute="trailing" id="brq-yF-WM8"/>
|
||||
<constraint firstItem="Lxj-Sb-kC6" firstAttribute="leading" secondItem="PO9-pF-A7O" secondAttribute="leading" id="d73-kq-kX4"/>
|
||||
<constraint firstItem="0bE-2H-tqE" firstAttribute="top" secondItem="Lxj-Sb-kC6" secondAttribute="bottom" id="ltM-g9-Dgm"/>
|
||||
<constraint firstItem="0bE-2H-tqE" firstAttribute="top" secondItem="Lxj-Sb-kC6" secondAttribute="bottom" id="dMl-nD-Jm5"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="Examples" id="sEr-D1-cU5"/>
|
||||
@@ -118,7 +120,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="1V5-DZ-WfF" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="527" y="56"/>
|
||||
<point key="canvasLocation" x="763.768115942029" y="37.5"/>
|
||||
</scene>
|
||||
<!--Blog Example View Controller-->
|
||||
<scene sceneID="Vn0-9y-5bc">
|
||||
@@ -129,15 +131,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="scM-da-Sg0"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="hrV-fb-58s">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="RJB-cz-SnF"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Fvo-wr-5Ca" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="167" y="1151"/>
|
||||
<point key="canvasLocation" x="242.0289855072464" y="770.75892857142856"/>
|
||||
</scene>
|
||||
<!--Validation Examples-->
|
||||
<scene sceneID="z2I-Nk-y9W">
|
||||
@@ -148,15 +150,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="xtJ-Wo-mhU"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="1Ol-Ra-Ysg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="Fty-3j-BeF">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<rect key="frame" x="0.0" y="24" width="414" height="838"/>
|
||||
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="xtJ-Wo-mhU" firstAttribute="top" secondItem="Fty-3j-BeF" secondAttribute="bottom" id="CbV-4f-RzP"/>
|
||||
<constraint firstItem="Fty-3j-BeF" firstAttribute="top" secondItem="AG9-N9-2qp" secondAttribute="bottom" constant="-64" id="Pdw-VG-qcc"/>
|
||||
@@ -173,7 +175,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="VFT-Og-STO" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="566" y="938"/>
|
||||
<point key="canvasLocation" x="820.28985507246387" y="628.125"/>
|
||||
</scene>
|
||||
<!--Predicate Form View Controller-->
|
||||
<scene sceneID="a9p-C8-g8y">
|
||||
@@ -184,15 +186,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="Lsg-dH-McH"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="6EZ-O7-FjX">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Lsd-xH-7IN"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="rZL-10-YZn" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="956" y="924"/>
|
||||
<point key="canvasLocation" x="1385.5072463768117" y="618.75"/>
|
||||
</scene>
|
||||
<!--Selectors Form View Controller-->
|
||||
<scene sceneID="KYK-TX-8rm">
|
||||
@@ -203,9 +205,9 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="CTu-Y5-7Qw"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="bNj-SD-83w">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Buo-Af-6Q1"/>
|
||||
<connections>
|
||||
@@ -214,7 +216,7 @@
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="8fu-YK-6qz" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1346" y="533"/>
|
||||
<point key="canvasLocation" x="1950.7246376811595" y="356.91964285714283"/>
|
||||
</scene>
|
||||
<!--Map View Controller-->
|
||||
<scene sceneID="tAS-lK-35t">
|
||||
@@ -225,15 +227,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="cgQ-Vs-ICN"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="JjC-E5-SyY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="BjG-Bq-0lD"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="LmS-YR-mFY" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1789" y="533"/>
|
||||
<point key="canvasLocation" x="2592.753623188406" y="356.91964285714283"/>
|
||||
</scene>
|
||||
<!--Native Event Navigation View Controller-->
|
||||
<scene sceneID="mNb-be-ApA">
|
||||
@@ -241,7 +243,7 @@
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="K9D-4c-9eZ" customClass="NativeEventNavigationViewController" customModule="SwiftExample" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="fO3-V7-XXu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
@@ -251,7 +253,7 @@
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="eqB-vl-BzH" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="588" y="-635"/>
|
||||
<point key="canvasLocation" x="852.17391304347836" y="-425.22321428571428"/>
|
||||
</scene>
|
||||
<!--Basic Predicate View Controller-->
|
||||
<scene sceneID="pD4-sm-x3a">
|
||||
@@ -262,15 +264,15 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="2b4-gN-85p"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="NZg-t1-g19">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="1lh-jZ-lIV"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Tlw-q2-pcu" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-159" y="1151"/>
|
||||
<point key="canvasLocation" x="-230.43478260869566" y="770.75892857142856"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<inferredMetricsTieBreakers>
|
||||
|
||||
@@ -150,7 +150,7 @@ class ValidationExamplesFormViewController : XLFormViewController {
|
||||
animation.values = [0, 20, -20, 10, 0]
|
||||
animation.keyTimes = [0, NSNumber(value: 1 / 6.0), NSNumber(value: 3 / 6.0), NSNumber(value: 5 / 6.0), 1]
|
||||
animation.duration = 0.3
|
||||
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
|
||||
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
|
||||
animation.isAdditive = true
|
||||
cell.layer.add(animation, forKey: "shake")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
// swift-tools-version:5.2
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "XLForm",
|
||||
platforms: [
|
||||
.iOS(.v9)
|
||||
],
|
||||
products: [
|
||||
.library(name: "XLForm", targets: ["XLForm"])
|
||||
],
|
||||
dependencies: [],
|
||||
targets: [
|
||||
.target(
|
||||
name: "XLForm",
|
||||
dependencies: [],
|
||||
path: "XLForm",
|
||||
publicHeadersPath: "XL"
|
||||
)
|
||||
]
|
||||
)
|
||||
@@ -1,12 +1,11 @@
|
||||
XLForm
|
||||
---------------
|
||||
|
||||
By [XMARTLABS](http://xmartlabs.com).
|
||||

|
||||
|
||||
[](https://travis-ci.org/xmartlabs/XLForm)
|
||||
<a href="https://cocoapods.org/pods/XLForm"><img src="https://img.shields.io/cocoapods/v/XLForm.svg" alt="CocoaPods compatible" /></a>
|
||||
|
||||
**If you are working in Swift then you should have a look at [Eureka], a complete re-design of XLForm in Swift.** *Do not panic, we will continue maintaining and improving XLForm, obj-c rocks!!*
|
||||
**If you are working in Swift then you should have a look at [Eureka], a complete re-design of XLForm in Swift and with more features.**
|
||||
|
||||
We are not implementing any new features for XLForm anymore. However, if a critical issue arises we will fix it.
|
||||
|
||||
Purpose
|
||||
--------------
|
||||
@@ -154,7 +153,7 @@ A form definition is a `XLFormDescriptor` instance that contains one or more sec
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"starts" rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Starts"];
|
||||
row.value = [NSDate dateWithTimeIntervalSinceNow:60*60*24];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
self.form = form;
|
||||
}
|
||||
```
|
||||
@@ -492,7 +491,7 @@ Set `steps` to `@(0)` to disable the steps functionality.
|
||||
|
||||
##### Info
|
||||
|
||||
Sometimes our apps needs to show data that are not editable. XLForm provides us with `XLFormRowDescriptorTypeInfo` row type to display not editable info. An example of usage would be showing the app version in the settings part of an app.
|
||||
Sometimes our apps needs to show data that are not editable. XLForm provides us with `XLFormRowDescriptorTypeInfo` row type to display not editable info. An example of usage would be showing the app version in the settings part of an app.
|
||||
|
||||
##### Button
|
||||
|
||||
@@ -502,7 +501,7 @@ Apart from data entry rows, not editable rows and selectors, XLForm has a button
|
||||
Multivalued Sections (Insert, Delete, Reorder rows)
|
||||
------------------------
|
||||
|
||||
Any `XLFormSectionDescriptor` object can be set up to support row insertion, deletion or reodering. It is possible to enable only one of these modes, a combination or all together.
|
||||
Any `XLFormSectionDescriptor` object can be set up to support row insertion, deletion or reodering. It is possible to enable only one of these modes, a combination or all together.
|
||||
A multivalued section is just a section that support either of these modes.
|
||||
|
||||
The most interesting part of multivalued `XLFormSectionDescriptor` is that it supports all the types of rows that were shown on the [*Rows*](#rows "Rows") section as well as custom rows.
|
||||
@@ -666,7 +665,7 @@ row.action.viewControllerClass = [MapViewController class];
|
||||
// or
|
||||
//row.action.viewControllerNibName = @"MapViewControllerNibName";
|
||||
|
||||
// Set up a NSValueTransformer to convert CLLocation to NSString, it's used to show the select value description (text).
|
||||
// Set up a NSValueTransformer to convert CLLocation to NSString, it's used to show the select value description (text).
|
||||
row.valueTransformer = [CLLocationValueTrasformer class];
|
||||
// Set up the default value
|
||||
row.value = [[CLLocation alloc] initWithLatitude:-33 longitude:-56];
|
||||
@@ -690,7 +689,7 @@ XLForm sets up `rowDescriptor` property using the `XLFormRowDescriptor` instance
|
||||
|
||||
The developer is responsible for update its views with the `rowDescriptor` value as well as set the selected value to `rowDescriptor` from within the custom selector view controller.
|
||||
|
||||
> Note: the properties `viewControllerClass`, `viewControllerNibName` or `viewControllerStoryboardId` are mutually exclusive and are used by `XLFormButtonCell` and `XLFormSelectorCell`. If you create a custom cell then you are responsible for using them.
|
||||
> Note: the properties `viewControllerClass`, `viewControllerNibName` or `viewControllerStoryboardId` are mutually exclusive and are used by `XLFormButtonCell` and `XLFormSelectorCell`. If you create a custom cell then you are responsible for using them.
|
||||
|
||||
|
||||
#### Another example
|
||||
@@ -1098,10 +1097,10 @@ This is how you can set them:
|
||||
|
||||
#### How to change the height of one cell
|
||||
|
||||
If you want to change the height for all cells of one class you should subclass that cell and override the class method `formDescriptorCellHeightForRowDescriptor`.
|
||||
If you want to change the height for all cells of one class you should subclass that cell and override the class method `formDescriptorCellHeightForRowDescriptor`.
|
||||
If you want to change the height of one individual cell then you can set that height to the `height` property of XLFormRowDescripto like this:
|
||||
```
|
||||
XLFormRowDescriptor* row = ...
|
||||
XLFormRowDescriptor* row = ...
|
||||
row.height = 55;
|
||||
```
|
||||
|
||||
@@ -1123,10 +1122,32 @@ You can make this happen using the `textFieldMaxNumberOfCharacters` and the `tex
|
||||
Installation
|
||||
--------------------------
|
||||
|
||||
## Swift Package Manager
|
||||
|
||||
Starting with Xcode 11, Swift Package Manager is the recommended and preferred way for installing dependencies in Xcode projects. Installing dependencies via SwiftPM does not require the application nor dependencies to be written in Swift.
|
||||
|
||||
To add XLForm to your project using SwiftPM follow these steps:
|
||||
|
||||
1. Open your project in Xcode
|
||||
1. In the main menu, select File -> Swift Packages -> Add Package Dependency...
|
||||
1. In the window, enter the package url https://github.com/xmartlabs/XLForm
|
||||
1. Configure the version to be used
|
||||
|
||||
To use XLForm in your code, import the module or header files as needed:
|
||||
|
||||
```objc
|
||||
#import "XLForm.h" // Obj-c
|
||||
```
|
||||
|
||||
```swift
|
||||
import XLForm // Swift
|
||||
```
|
||||
|
||||
|
||||
## CocoaPods
|
||||
|
||||
1. Add the following line in the project's Podfile file:
|
||||
`pod 'XLForm', '~> 4.0'`.
|
||||
`pod 'XLForm', '~> 4.3'`.
|
||||
2. Run the command `pod install` from the Podfile folder directory.
|
||||
|
||||
XLForm **has no** dependencies over other pods.
|
||||
@@ -1156,7 +1177,7 @@ For further details on how to create and configure the bridging header file visi
|
||||
In your `Cartfile` add:
|
||||
|
||||
```
|
||||
github "xmartlabs/XLForm" ~> 4.0
|
||||
github "xmartlabs/XLForm" ~> 4.2
|
||||
```
|
||||
|
||||
## Using git submodules
|
||||
@@ -1180,7 +1201,7 @@ Requirements
|
||||
|
||||
* ARC
|
||||
* iOS 9.0 and above
|
||||
* XCode 9.0+
|
||||
* Xcode 9.0+ (11.0+ for installation via Swift Package Manager)
|
||||
|
||||
|
||||
Release Notes
|
||||
|
||||
@@ -3,7 +3,7 @@ include FileUtils::Verbose
|
||||
namespace :test do
|
||||
desc "Run the XLForm Tests"
|
||||
task :ios do
|
||||
run_tests('XLForm Tests', 'iphonesimulator11.0')
|
||||
run_tests('XLForm Tests', 'iphonesimulator')
|
||||
tests_failed unless $?.success?
|
||||
end
|
||||
end
|
||||
@@ -17,7 +17,7 @@ task :default => 'test'
|
||||
private
|
||||
|
||||
def run_tests(scheme, sdk)
|
||||
sh("xcodebuild -workspace 'Tests/XLForm Tests.xcworkspace' -scheme '#{scheme}' -sdk '#{sdk}' -destination 'OS=11.0,name=iPhone 8' -configuration Release clean test | xcpretty -c ; exit ${PIPESTATUS[0]}") rescue nil
|
||||
sh("xcodebuild -workspace 'Tests/XLForm Tests.xcworkspace' -scheme '#{scheme}' -sdk '#{sdk}' -destination 'OS=14.0,name=iPhone 11' -configuration Release clean test | xcpretty -c ; exit ${PIPESTATUS[0]}") rescue nil
|
||||
end
|
||||
|
||||
def tests_failed
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
source 'https://github.com/CocoaPods/Specs.git'
|
||||
source 'https://cdn.cocoapods.org/'
|
||||
project 'XLForm Tests'
|
||||
inhibit_all_warnings!
|
||||
|
||||
|
||||
@@ -150,7 +150,6 @@
|
||||
28657A361990879200CE8180 /* Sources */,
|
||||
28657A371990879200CE8180 /* Frameworks */,
|
||||
28657A381990879200CE8180 /* Resources */,
|
||||
51F3E228D166F2E8BF8C889E /* [CP] Embed Pods Frameworks */,
|
||||
7E96395A3A94BDD9487AE471 /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
@@ -217,37 +216,22 @@
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
51F3E228D166F2E8BF8C889E /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-XLForm Tests/Pods-XLForm Tests-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
7E96395A3A94BDD9487AE471 /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${SRCROOT}/Pods/Target Support Files/Pods-XLForm Tests/Pods-XLForm Tests-resources.sh",
|
||||
"${PODS_ROOT}/Target Support Files/Pods-XLForm Tests/Pods-XLForm Tests-resources.sh",
|
||||
"${PODS_ROOT}/../../XLForm/XLForm.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/XLForm.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-XLForm Tests/Pods-XLForm Tests-resources.sh\"\n";
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-XLForm Tests/Pods-XLForm Tests-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
+1
-1
@@ -1,6 +1,6 @@
|
||||
Pod::Spec.new do |s|
|
||||
s.name = 'XLForm'
|
||||
s.version = '4.0.0'
|
||||
s.version = '4.3.0'
|
||||
s.license = { :type => 'MIT' }
|
||||
s.summary = 'XLForm is the most flexible and powerful iOS library to create dynamic table-view forms.'
|
||||
s.description = <<-DESC
|
||||
|
||||
+319
-307
@@ -7,164 +7,164 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
6442F6501C1FC3AA00C9152F /* XLFormImageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 6442F64E1C1FC3AA00C9152F /* XLFormImageCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
6442F6511C1FC3AA00C9152F /* XLFormImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6442F64F1C1FC3AA00C9152F /* XLFormImageCell.m */; };
|
||||
E267FD7C1BE804E200F86B42 /* XLFormBaseCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD2C1BE804E200F86B42 /* XLFormBaseCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD7D1BE804E200F86B42 /* XLFormBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD2D1BE804E200F86B42 /* XLFormBaseCell.m */; };
|
||||
E267FD7E1BE804E200F86B42 /* XLFormButtonCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD2E1BE804E200F86B42 /* XLFormButtonCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD7F1BE804E200F86B42 /* XLFormButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD2F1BE804E200F86B42 /* XLFormButtonCell.m */; };
|
||||
E267FD801BE804E200F86B42 /* XLFormCheckCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD301BE804E200F86B42 /* XLFormCheckCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD811BE804E200F86B42 /* XLFormCheckCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD311BE804E200F86B42 /* XLFormCheckCell.m */; };
|
||||
E267FD821BE804E200F86B42 /* XLFormDateCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD321BE804E200F86B42 /* XLFormDateCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD831BE804E200F86B42 /* XLFormDateCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD331BE804E200F86B42 /* XLFormDateCell.m */; };
|
||||
E267FD841BE804E200F86B42 /* XLFormDatePickerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD341BE804E200F86B42 /* XLFormDatePickerCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD851BE804E200F86B42 /* XLFormDatePickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD351BE804E200F86B42 /* XLFormDatePickerCell.m */; };
|
||||
E267FD861BE804E200F86B42 /* XLFormDescriptorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD361BE804E200F86B42 /* XLFormDescriptorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD871BE804E200F86B42 /* XLFormInlineRowDescriptorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD371BE804E200F86B42 /* XLFormInlineRowDescriptorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD881BE804E200F86B42 /* XLFormInlineSelectorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD381BE804E200F86B42 /* XLFormInlineSelectorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD891BE804E200F86B42 /* XLFormInlineSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD391BE804E200F86B42 /* XLFormInlineSelectorCell.m */; };
|
||||
E267FD8A1BE804E200F86B42 /* XLFormLeftRightSelectorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD3A1BE804E200F86B42 /* XLFormLeftRightSelectorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD8B1BE804E200F86B42 /* XLFormLeftRightSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD3B1BE804E200F86B42 /* XLFormLeftRightSelectorCell.m */; };
|
||||
E267FD8C1BE804E200F86B42 /* XLFormPickerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD3C1BE804E200F86B42 /* XLFormPickerCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD8D1BE804E200F86B42 /* XLFormPickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD3D1BE804E200F86B42 /* XLFormPickerCell.m */; };
|
||||
E267FD8E1BE804E200F86B42 /* XLFormSegmentedCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD3E1BE804E200F86B42 /* XLFormSegmentedCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD8F1BE804E200F86B42 /* XLFormSegmentedCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD3F1BE804E200F86B42 /* XLFormSegmentedCell.m */; };
|
||||
E267FD901BE804E200F86B42 /* XLFormSelectorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD401BE804E200F86B42 /* XLFormSelectorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD911BE804E200F86B42 /* XLFormSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD411BE804E200F86B42 /* XLFormSelectorCell.m */; };
|
||||
E267FD921BE804E200F86B42 /* XLFormSliderCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD421BE804E200F86B42 /* XLFormSliderCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD931BE804E200F86B42 /* XLFormSliderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD431BE804E200F86B42 /* XLFormSliderCell.m */; };
|
||||
E267FD941BE804E200F86B42 /* XLFormStepCounterCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD441BE804E200F86B42 /* XLFormStepCounterCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD951BE804E200F86B42 /* XLFormStepCounterCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD451BE804E200F86B42 /* XLFormStepCounterCell.m */; };
|
||||
E267FD961BE804E200F86B42 /* XLFormSwitchCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD461BE804E200F86B42 /* XLFormSwitchCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD971BE804E200F86B42 /* XLFormSwitchCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD471BE804E200F86B42 /* XLFormSwitchCell.m */; };
|
||||
E267FD981BE804E200F86B42 /* XLFormTextFieldCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD481BE804E200F86B42 /* XLFormTextFieldCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD991BE804E200F86B42 /* XLFormTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD491BE804E200F86B42 /* XLFormTextFieldCell.m */; };
|
||||
E267FD9A1BE804E200F86B42 /* XLFormTextViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD4A1BE804E200F86B42 /* XLFormTextViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD9B1BE804E200F86B42 /* XLFormTextViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD4B1BE804E200F86B42 /* XLFormTextViewCell.m */; };
|
||||
E267FD9C1BE804E200F86B42 /* XLFormOptionsObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD4D1BE804E200F86B42 /* XLFormOptionsObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD9D1BE804E200F86B42 /* XLFormOptionsObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD4E1BE804E200F86B42 /* XLFormOptionsObject.m */; };
|
||||
E267FD9E1BE804E200F86B42 /* XLFormOptionsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD4F1BE804E200F86B42 /* XLFormOptionsViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FD9F1BE804E200F86B42 /* XLFormOptionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD501BE804E200F86B42 /* XLFormOptionsViewController.m */; };
|
||||
E267FDA01BE804E200F86B42 /* XLFormRowDescriptorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD511BE804E200F86B42 /* XLFormRowDescriptorViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDA11BE804E200F86B42 /* XLFormViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD521BE804E200F86B42 /* XLFormViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDA21BE804E200F86B42 /* XLFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD531BE804E200F86B42 /* XLFormViewController.m */; };
|
||||
E267FDA31BE804E200F86B42 /* XLFormDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD551BE804E200F86B42 /* XLFormDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDA41BE804E200F86B42 /* XLFormDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD561BE804E200F86B42 /* XLFormDescriptor.m */; };
|
||||
E267FDA51BE804E200F86B42 /* XLFormDescriptorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD571BE804E200F86B42 /* XLFormDescriptorDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDA61BE804E200F86B42 /* XLFormRowDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD581BE804E200F86B42 /* XLFormRowDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDA71BE804E200F86B42 /* XLFormRowDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD591BE804E200F86B42 /* XLFormRowDescriptor.m */; };
|
||||
E267FDA81BE804E200F86B42 /* XLFormSectionDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD5A1BE804E200F86B42 /* XLFormSectionDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDA91BE804E200F86B42 /* XLFormSectionDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD5B1BE804E200F86B42 /* XLFormSectionDescriptor.m */; };
|
||||
E267FDAA1BE804E200F86B42 /* NSArray+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD5D1BE804E200F86B42 /* NSArray+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDAB1BE804E200F86B42 /* NSArray+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD5E1BE804E200F86B42 /* NSArray+XLFormAdditions.m */; };
|
||||
E267FDAC1BE804E200F86B42 /* NSExpression+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD5F1BE804E200F86B42 /* NSExpression+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDAD1BE804E200F86B42 /* NSExpression+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD601BE804E200F86B42 /* NSExpression+XLFormAdditions.m */; };
|
||||
E267FDAE1BE804E200F86B42 /* NSObject+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD611BE804E200F86B42 /* NSObject+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDAF1BE804E200F86B42 /* NSObject+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD621BE804E200F86B42 /* NSObject+XLFormAdditions.m */; };
|
||||
E267FDB01BE804E200F86B42 /* NSPredicate+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD631BE804E200F86B42 /* NSPredicate+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDB11BE804E200F86B42 /* NSPredicate+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD641BE804E200F86B42 /* NSPredicate+XLFormAdditions.m */; };
|
||||
E267FDB21BE804E200F86B42 /* NSString+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD651BE804E200F86B42 /* NSString+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDB31BE804E200F86B42 /* NSString+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD661BE804E200F86B42 /* NSString+XLFormAdditions.m */; };
|
||||
E267FDB41BE804E200F86B42 /* UIView+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD671BE804E200F86B42 /* UIView+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDB51BE804E200F86B42 /* UIView+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD681BE804E200F86B42 /* UIView+XLFormAdditions.m */; };
|
||||
E267FDB61BE804E200F86B42 /* XLFormRightDetailCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD6A1BE804E200F86B42 /* XLFormRightDetailCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDB71BE804E200F86B42 /* XLFormRightDetailCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD6B1BE804E200F86B42 /* XLFormRightDetailCell.m */; };
|
||||
E267FDB81BE804E200F86B42 /* XLFormRightImageButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD6C1BE804E200F86B42 /* XLFormRightImageButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDB91BE804E200F86B42 /* XLFormRightImageButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD6D1BE804E200F86B42 /* XLFormRightImageButton.m */; };
|
||||
E267FDBA1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD6E1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDBB1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD6F1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.m */; };
|
||||
E267FDBC1BE804E200F86B42 /* XLFormTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD701BE804E200F86B42 /* XLFormTextView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDBD1BE804E200F86B42 /* XLFormTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD711BE804E200F86B42 /* XLFormTextView.m */; };
|
||||
E267FDBE1BE804E200F86B42 /* XLFormRegexValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD731BE804E200F86B42 /* XLFormRegexValidator.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDBF1BE804E200F86B42 /* XLFormRegexValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD741BE804E200F86B42 /* XLFormRegexValidator.m */; };
|
||||
E267FDC01BE804E200F86B42 /* XLFormValidationStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD751BE804E200F86B42 /* XLFormValidationStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDC11BE804E200F86B42 /* XLFormValidationStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD761BE804E200F86B42 /* XLFormValidationStatus.m */; };
|
||||
E267FDC21BE804E200F86B42 /* XLFormValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD771BE804E200F86B42 /* XLFormValidator.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDC31BE804E200F86B42 /* XLFormValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD781BE804E200F86B42 /* XLFormValidator.m */; };
|
||||
E267FDC41BE804E200F86B42 /* XLFormValidatorProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD791BE804E200F86B42 /* XLFormValidatorProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695192513CEFF0059594E /* XLFormBaseCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695072513CEFC0059594E /* XLFormBaseCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26951A2513CEFF0059594E /* XLFormCheckCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695082513CEFC0059594E /* XLFormCheckCell.m */; };
|
||||
9C26951B2513CEFF0059594E /* XLFormDatePickerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695092513CEFC0059594E /* XLFormDatePickerCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26951C2513CEFF0059594E /* XLFormButtonCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26950A2513CEFC0059594E /* XLFormButtonCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26951D2513CEFF0059594E /* XLFormButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26950B2513CEFC0059594E /* XLFormButtonCell.m */; };
|
||||
9C26951E2513CEFF0059594E /* XLFormInlineSelectorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26950C2513CEFC0059594E /* XLFormInlineSelectorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26951F2513CEFF0059594E /* XLFormDatePickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26950D2513CEFD0059594E /* XLFormDatePickerCell.m */; };
|
||||
9C2695202513CEFF0059594E /* XLFormCheckCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26950E2513CEFD0059594E /* XLFormCheckCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695212513CEFF0059594E /* XLFormImageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26950F2513CEFD0059594E /* XLFormImageCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695222513CEFF0059594E /* XLFormLeftRightSelectorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695102513CEFD0059594E /* XLFormLeftRightSelectorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695232513CEFF0059594E /* XLFormLeftRightSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695112513CEFE0059594E /* XLFormLeftRightSelectorCell.m */; };
|
||||
9C2695242513CEFF0059594E /* XLFormInlineRowDescriptorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695122513CEFE0059594E /* XLFormInlineRowDescriptorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695252513CEFF0059594E /* XLFormDateCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695132513CEFE0059594E /* XLFormDateCell.m */; };
|
||||
9C2695262513CEFF0059594E /* XLFormInlineSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695142513CEFE0059594E /* XLFormInlineSelectorCell.m */; };
|
||||
9C2695272513CEFF0059594E /* XLFormBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695152513CEFE0059594E /* XLFormBaseCell.m */; };
|
||||
9C2695282513CEFF0059594E /* XLFormDescriptorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695162513CEFE0059594E /* XLFormDescriptorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695292513CEFF0059594E /* XLFormImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695172513CEFE0059594E /* XLFormImageCell.m */; };
|
||||
9C26952A2513CEFF0059594E /* XLFormDateCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695182513CEFF0059594E /* XLFormDateCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26953B2513CFA70059594E /* XLFormStepCounterCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26952B2513CFA60059594E /* XLFormStepCounterCell.m */; };
|
||||
9C26953C2513CFA70059594E /* XLFormPickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26952C2513CFA60059594E /* XLFormPickerCell.m */; };
|
||||
9C26953D2513CFA70059594E /* XLFormSliderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26952D2513CFA60059594E /* XLFormSliderCell.m */; };
|
||||
9C26953E2513CFA70059594E /* XLFormSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26952E2513CFA60059594E /* XLFormSelectorCell.m */; };
|
||||
9C26953F2513CFA70059594E /* XLFormTextViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26952F2513CFA60059594E /* XLFormTextViewCell.m */; };
|
||||
9C2695402513CFA70059594E /* XLFormTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695302513CFA60059594E /* XLFormTextFieldCell.m */; };
|
||||
9C2695412513CFA70059594E /* XLFormStepCounterCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695312513CFA60059594E /* XLFormStepCounterCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695422513CFA70059594E /* XLFormTextFieldCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695322513CFA60059594E /* XLFormTextFieldCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695432513CFA70059594E /* XLFormSliderCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695332513CFA60059594E /* XLFormSliderCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695442513CFA70059594E /* XLFormTextViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695342513CFA60059594E /* XLFormTextViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695452513CFA70059594E /* XLFormSegmentedCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695352513CFA70059594E /* XLFormSegmentedCell.m */; };
|
||||
9C2695462513CFA70059594E /* XLFormPickerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695362513CFA70059594E /* XLFormPickerCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695472513CFA70059594E /* XLFormSwitchCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695372513CFA70059594E /* XLFormSwitchCell.m */; };
|
||||
9C2695482513CFA70059594E /* XLFormSwitchCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695382513CFA70059594E /* XLFormSwitchCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695492513CFA70059594E /* XLFormSegmentedCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695392513CFA70059594E /* XLFormSegmentedCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26954A2513CFA70059594E /* XLFormSelectorCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26953A2513CFA70059594E /* XLFormSelectorCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695522513CFF50059594E /* XLFormViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26954B2513CFF50059594E /* XLFormViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695532513CFF50059594E /* XLFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26954C2513CFF50059594E /* XLFormViewController.m */; };
|
||||
9C2695542513CFF50059594E /* XLFormRowDescriptorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26954D2513CFF50059594E /* XLFormRowDescriptorViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695552513CFF50059594E /* XLFormOptionsObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26954E2513CFF50059594E /* XLFormOptionsObject.m */; };
|
||||
9C2695562513CFF50059594E /* XLFormOptionsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26954F2513CFF50059594E /* XLFormOptionsViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695572513CFF50059594E /* XLFormOptionsObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695502513CFF50059594E /* XLFormOptionsObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695582513CFF50059594E /* XLFormOptionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695512513CFF50059594E /* XLFormOptionsViewController.m */; };
|
||||
9C2695602513D0230059594E /* XLFormDescriptorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695592513D0230059594E /* XLFormDescriptorDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695612513D0230059594E /* XLFormRowDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26955A2513D0230059594E /* XLFormRowDescriptor.m */; };
|
||||
9C2695622513D0230059594E /* XLFormSectionDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26955B2513D0230059594E /* XLFormSectionDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695632513D0230059594E /* XLFormRowDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26955C2513D0230059594E /* XLFormRowDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695642513D0230059594E /* XLFormDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26955D2513D0230059594E /* XLFormDescriptor.m */; };
|
||||
9C2695652513D0230059594E /* XLFormSectionDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26955E2513D0230059594E /* XLFormSectionDescriptor.m */; };
|
||||
9C2695662513D0230059594E /* XLFormDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26955F2513D0230059594E /* XLFormDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695732513D0520059594E /* NSArray+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695672513D0510059594E /* NSArray+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695742513D0520059594E /* NSString+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695682513D0510059594E /* NSString+XLFormAdditions.m */; };
|
||||
9C2695752513D0520059594E /* NSExpression+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695692513D0510059594E /* NSExpression+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695762513D0520059594E /* NSObject+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26956A2513D0510059594E /* NSObject+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695772513D0520059594E /* NSPredicate+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26956B2513D0510059594E /* NSPredicate+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695782513D0520059594E /* UIView+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26956C2513D0510059594E /* UIView+XLFormAdditions.m */; };
|
||||
9C2695792513D0520059594E /* NSArray+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26956D2513D0510059594E /* NSArray+XLFormAdditions.m */; };
|
||||
9C26957A2513D0520059594E /* NSExpression+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26956E2513D0510059594E /* NSExpression+XLFormAdditions.m */; };
|
||||
9C26957B2513D0520059594E /* NSPredicate+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C26956F2513D0510059594E /* NSPredicate+XLFormAdditions.m */; };
|
||||
9C26957C2513D0520059594E /* UIView+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695702513D0510059594E /* UIView+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26957D2513D0520059594E /* NSObject+XLFormAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695712513D0510059594E /* NSObject+XLFormAdditions.m */; };
|
||||
9C26957E2513D0520059594E /* NSString+XLFormAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695722513D0520059594E /* NSString+XLFormAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695872513D0960059594E /* XLFormRightImageButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26957F2513D0950059594E /* XLFormRightImageButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695882513D0960059594E /* XLFormRightDetailCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695802513D0950059594E /* XLFormRightDetailCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695892513D0960059594E /* XLFormTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695812513D0950059594E /* XLFormTextView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26958A2513D0960059594E /* XLFormRowNavigationAccessoryView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695822513D0950059594E /* XLFormRowNavigationAccessoryView.m */; };
|
||||
9C26958B2513D0960059594E /* XLFormTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695832513D0950059594E /* XLFormTextView.m */; };
|
||||
9C26958C2513D0960059594E /* XLFormRowNavigationAccessoryView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695842513D0950059594E /* XLFormRowNavigationAccessoryView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26958D2513D0960059594E /* XLFormRightImageButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695852513D0950059594E /* XLFormRightImageButton.m */; };
|
||||
9C26958E2513D0960059594E /* XLFormRightDetailCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695862513D0960059594E /* XLFormRightDetailCell.m */; };
|
||||
9C2695962513D0D00059594E /* XLFormValidationStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26958F2513D0CF0059594E /* XLFormValidationStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695972513D0D00059594E /* XLFormValidationStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695902513D0CF0059594E /* XLFormValidationStatus.m */; };
|
||||
9C2695982513D0D00059594E /* XLFormValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695912513D0CF0059594E /* XLFormValidator.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C2695992513D0D00059594E /* XLFormRegexValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695922513D0CF0059594E /* XLFormRegexValidator.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26959A2513D0D00059594E /* XLFormRegexValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695932513D0D00059594E /* XLFormRegexValidator.m */; };
|
||||
9C26959B2513D0D00059594E /* XLFormValidatorProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2695942513D0D00059594E /* XLFormValidatorProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
9C26959C2513D0D00059594E /* XLFormValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2695952513D0D00059594E /* XLFormValidator.m */; };
|
||||
E267FDC51BE804E200F86B42 /* XLForm.h in Headers */ = {isa = PBXBuildFile; fileRef = E267FD7A1BE804E200F86B42 /* XLForm.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E267FDC61BE804E200F86B42 /* XLForm.m in Sources */ = {isa = PBXBuildFile; fileRef = E267FD7B1BE804E200F86B42 /* XLForm.m */; };
|
||||
E267FDC81BE806D000F86B42 /* XLForm.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E267FDC71BE806D000F86B42 /* XLForm.bundle */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
6442F64E1C1FC3AA00C9152F /* XLFormImageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormImageCell.h; sourceTree = "<group>"; };
|
||||
6442F64F1C1FC3AA00C9152F /* XLFormImageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormImageCell.m; sourceTree = "<group>"; };
|
||||
9C2695072513CEFC0059594E /* XLFormBaseCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormBaseCell.h; path = XLForm/XL/XLFormBaseCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695082513CEFC0059594E /* XLFormCheckCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormCheckCell.m; path = XLForm/XL/XLFormCheckCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695092513CEFC0059594E /* XLFormDatePickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormDatePickerCell.h; path = XLForm/XL/XLFormDatePickerCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C26950A2513CEFC0059594E /* XLFormButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormButtonCell.h; path = XLForm/XL/XLFormButtonCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C26950B2513CEFC0059594E /* XLFormButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormButtonCell.m; path = XLForm/XL/XLFormButtonCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C26950C2513CEFC0059594E /* XLFormInlineSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormInlineSelectorCell.h; path = XLForm/XL/XLFormInlineSelectorCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C26950D2513CEFD0059594E /* XLFormDatePickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormDatePickerCell.m; path = XLForm/XL/XLFormDatePickerCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C26950E2513CEFD0059594E /* XLFormCheckCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormCheckCell.h; path = XLForm/XL/XLFormCheckCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C26950F2513CEFD0059594E /* XLFormImageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormImageCell.h; path = XLForm/XL/XLFormImageCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695102513CEFD0059594E /* XLFormLeftRightSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormLeftRightSelectorCell.h; path = XLForm/XL/XLFormLeftRightSelectorCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695112513CEFE0059594E /* XLFormLeftRightSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormLeftRightSelectorCell.m; path = XLForm/XL/XLFormLeftRightSelectorCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695122513CEFE0059594E /* XLFormInlineRowDescriptorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormInlineRowDescriptorCell.h; path = XLForm/XL/XLFormInlineRowDescriptorCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695132513CEFE0059594E /* XLFormDateCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormDateCell.m; path = XLForm/XL/XLFormDateCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695142513CEFE0059594E /* XLFormInlineSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormInlineSelectorCell.m; path = XLForm/XL/XLFormInlineSelectorCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695152513CEFE0059594E /* XLFormBaseCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormBaseCell.m; path = XLForm/XL/XLFormBaseCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695162513CEFE0059594E /* XLFormDescriptorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormDescriptorCell.h; path = XLForm/XL/XLFormDescriptorCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695172513CEFE0059594E /* XLFormImageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormImageCell.m; path = XLForm/XL/XLFormImageCell.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695182513CEFF0059594E /* XLFormDateCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormDateCell.h; path = XLForm/XL/XLFormDateCell.h; sourceTree = SOURCE_ROOT; };
|
||||
9C26952B2513CFA60059594E /* XLFormStepCounterCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormStepCounterCell.m; path = XL/XLFormStepCounterCell.m; sourceTree = "<group>"; };
|
||||
9C26952C2513CFA60059594E /* XLFormPickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormPickerCell.m; path = XL/XLFormPickerCell.m; sourceTree = "<group>"; };
|
||||
9C26952D2513CFA60059594E /* XLFormSliderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormSliderCell.m; path = XL/XLFormSliderCell.m; sourceTree = "<group>"; };
|
||||
9C26952E2513CFA60059594E /* XLFormSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormSelectorCell.m; path = XL/XLFormSelectorCell.m; sourceTree = "<group>"; };
|
||||
9C26952F2513CFA60059594E /* XLFormTextViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormTextViewCell.m; path = XL/XLFormTextViewCell.m; sourceTree = "<group>"; };
|
||||
9C2695302513CFA60059594E /* XLFormTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormTextFieldCell.m; path = XL/XLFormTextFieldCell.m; sourceTree = "<group>"; };
|
||||
9C2695312513CFA60059594E /* XLFormStepCounterCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormStepCounterCell.h; path = XL/XLFormStepCounterCell.h; sourceTree = "<group>"; };
|
||||
9C2695322513CFA60059594E /* XLFormTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormTextFieldCell.h; path = XL/XLFormTextFieldCell.h; sourceTree = "<group>"; };
|
||||
9C2695332513CFA60059594E /* XLFormSliderCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormSliderCell.h; path = XL/XLFormSliderCell.h; sourceTree = "<group>"; };
|
||||
9C2695342513CFA60059594E /* XLFormTextViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormTextViewCell.h; path = XL/XLFormTextViewCell.h; sourceTree = "<group>"; };
|
||||
9C2695352513CFA70059594E /* XLFormSegmentedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormSegmentedCell.m; path = XL/XLFormSegmentedCell.m; sourceTree = "<group>"; };
|
||||
9C2695362513CFA70059594E /* XLFormPickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormPickerCell.h; path = XL/XLFormPickerCell.h; sourceTree = "<group>"; };
|
||||
9C2695372513CFA70059594E /* XLFormSwitchCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormSwitchCell.m; path = XL/XLFormSwitchCell.m; sourceTree = "<group>"; };
|
||||
9C2695382513CFA70059594E /* XLFormSwitchCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormSwitchCell.h; path = XL/XLFormSwitchCell.h; sourceTree = "<group>"; };
|
||||
9C2695392513CFA70059594E /* XLFormSegmentedCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormSegmentedCell.h; path = XL/XLFormSegmentedCell.h; sourceTree = "<group>"; };
|
||||
9C26953A2513CFA70059594E /* XLFormSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormSelectorCell.h; path = XL/XLFormSelectorCell.h; sourceTree = "<group>"; };
|
||||
9C26954B2513CFF50059594E /* XLFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormViewController.h; path = XL/XLFormViewController.h; sourceTree = "<group>"; };
|
||||
9C26954C2513CFF50059594E /* XLFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormViewController.m; path = XL/XLFormViewController.m; sourceTree = "<group>"; };
|
||||
9C26954D2513CFF50059594E /* XLFormRowDescriptorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormRowDescriptorViewController.h; path = XL/XLFormRowDescriptorViewController.h; sourceTree = "<group>"; };
|
||||
9C26954E2513CFF50059594E /* XLFormOptionsObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormOptionsObject.m; path = XL/XLFormOptionsObject.m; sourceTree = "<group>"; };
|
||||
9C26954F2513CFF50059594E /* XLFormOptionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormOptionsViewController.h; path = XL/XLFormOptionsViewController.h; sourceTree = "<group>"; };
|
||||
9C2695502513CFF50059594E /* XLFormOptionsObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormOptionsObject.h; path = XL/XLFormOptionsObject.h; sourceTree = "<group>"; };
|
||||
9C2695512513CFF50059594E /* XLFormOptionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormOptionsViewController.m; path = XL/XLFormOptionsViewController.m; sourceTree = "<group>"; };
|
||||
9C2695592513D0230059594E /* XLFormDescriptorDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormDescriptorDelegate.h; path = XL/XLFormDescriptorDelegate.h; sourceTree = "<group>"; };
|
||||
9C26955A2513D0230059594E /* XLFormRowDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormRowDescriptor.m; path = XL/XLFormRowDescriptor.m; sourceTree = "<group>"; };
|
||||
9C26955B2513D0230059594E /* XLFormSectionDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormSectionDescriptor.h; path = XL/XLFormSectionDescriptor.h; sourceTree = "<group>"; };
|
||||
9C26955C2513D0230059594E /* XLFormRowDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormRowDescriptor.h; path = XL/XLFormRowDescriptor.h; sourceTree = "<group>"; };
|
||||
9C26955D2513D0230059594E /* XLFormDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormDescriptor.m; path = XL/XLFormDescriptor.m; sourceTree = "<group>"; };
|
||||
9C26955E2513D0230059594E /* XLFormSectionDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormSectionDescriptor.m; path = XL/XLFormSectionDescriptor.m; sourceTree = "<group>"; };
|
||||
9C26955F2513D0230059594E /* XLFormDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormDescriptor.h; path = XL/XLFormDescriptor.h; sourceTree = "<group>"; };
|
||||
9C2695672513D0510059594E /* NSArray+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSArray+XLFormAdditions.h"; path = "XL/NSArray+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
9C2695682513D0510059594E /* NSString+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+XLFormAdditions.m"; path = "XL/NSString+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
9C2695692513D0510059594E /* NSExpression+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSExpression+XLFormAdditions.h"; path = "XL/NSExpression+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
9C26956A2513D0510059594E /* NSObject+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSObject+XLFormAdditions.h"; path = "XL/NSObject+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
9C26956B2513D0510059594E /* NSPredicate+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSPredicate+XLFormAdditions.h"; path = "XL/NSPredicate+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
9C26956C2513D0510059594E /* UIView+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIView+XLFormAdditions.m"; path = "XL/UIView+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
9C26956D2513D0510059594E /* NSArray+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSArray+XLFormAdditions.m"; path = "XL/NSArray+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
9C26956E2513D0510059594E /* NSExpression+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSExpression+XLFormAdditions.m"; path = "XL/NSExpression+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
9C26956F2513D0510059594E /* NSPredicate+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSPredicate+XLFormAdditions.m"; path = "XL/NSPredicate+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
9C2695702513D0510059594E /* UIView+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIView+XLFormAdditions.h"; path = "XL/UIView+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
9C2695712513D0510059594E /* NSObject+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSObject+XLFormAdditions.m"; path = "XL/NSObject+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
9C2695722513D0520059594E /* NSString+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+XLFormAdditions.h"; path = "XL/NSString+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
9C26957F2513D0950059594E /* XLFormRightImageButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormRightImageButton.h; path = XL/XLFormRightImageButton.h; sourceTree = "<group>"; };
|
||||
9C2695802513D0950059594E /* XLFormRightDetailCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormRightDetailCell.h; path = XL/XLFormRightDetailCell.h; sourceTree = "<group>"; };
|
||||
9C2695812513D0950059594E /* XLFormTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormTextView.h; path = XL/XLFormTextView.h; sourceTree = "<group>"; };
|
||||
9C2695822513D0950059594E /* XLFormRowNavigationAccessoryView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormRowNavigationAccessoryView.m; path = XL/XLFormRowNavigationAccessoryView.m; sourceTree = "<group>"; };
|
||||
9C2695832513D0950059594E /* XLFormTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormTextView.m; path = XL/XLFormTextView.m; sourceTree = "<group>"; };
|
||||
9C2695842513D0950059594E /* XLFormRowNavigationAccessoryView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormRowNavigationAccessoryView.h; path = XL/XLFormRowNavigationAccessoryView.h; sourceTree = "<group>"; };
|
||||
9C2695852513D0950059594E /* XLFormRightImageButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormRightImageButton.m; path = XL/XLFormRightImageButton.m; sourceTree = "<group>"; };
|
||||
9C2695862513D0960059594E /* XLFormRightDetailCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormRightDetailCell.m; path = XL/XLFormRightDetailCell.m; sourceTree = "<group>"; };
|
||||
9C26958F2513D0CF0059594E /* XLFormValidationStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormValidationStatus.h; path = XLForm/XL/XLFormValidationStatus.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695902513D0CF0059594E /* XLFormValidationStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormValidationStatus.m; path = XLForm/XL/XLFormValidationStatus.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695912513D0CF0059594E /* XLFormValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormValidator.h; path = XLForm/XL/XLFormValidator.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695922513D0CF0059594E /* XLFormRegexValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormRegexValidator.h; path = XLForm/XL/XLFormRegexValidator.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695932513D0D00059594E /* XLFormRegexValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormRegexValidator.m; path = XLForm/XL/XLFormRegexValidator.m; sourceTree = SOURCE_ROOT; };
|
||||
9C2695942513D0D00059594E /* XLFormValidatorProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormValidatorProtocol.h; path = XLForm/XL/XLFormValidatorProtocol.h; sourceTree = SOURCE_ROOT; };
|
||||
9C2695952513D0D00059594E /* XLFormValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormValidator.m; path = XLForm/XL/XLFormValidator.m; sourceTree = SOURCE_ROOT; };
|
||||
E267FD201BE8048900F86B42 /* XLForm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XLForm.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E267FD251BE8048900F86B42 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
E267FD2C1BE804E200F86B42 /* XLFormBaseCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormBaseCell.h; sourceTree = "<group>"; };
|
||||
E267FD2D1BE804E200F86B42 /* XLFormBaseCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormBaseCell.m; sourceTree = "<group>"; };
|
||||
E267FD2E1BE804E200F86B42 /* XLFormButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormButtonCell.h; sourceTree = "<group>"; };
|
||||
E267FD2F1BE804E200F86B42 /* XLFormButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormButtonCell.m; sourceTree = "<group>"; };
|
||||
E267FD301BE804E200F86B42 /* XLFormCheckCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormCheckCell.h; sourceTree = "<group>"; };
|
||||
E267FD311BE804E200F86B42 /* XLFormCheckCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormCheckCell.m; sourceTree = "<group>"; };
|
||||
E267FD321BE804E200F86B42 /* XLFormDateCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormDateCell.h; sourceTree = "<group>"; };
|
||||
E267FD331BE804E200F86B42 /* XLFormDateCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormDateCell.m; sourceTree = "<group>"; };
|
||||
E267FD341BE804E200F86B42 /* XLFormDatePickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormDatePickerCell.h; sourceTree = "<group>"; };
|
||||
E267FD351BE804E200F86B42 /* XLFormDatePickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormDatePickerCell.m; sourceTree = "<group>"; };
|
||||
E267FD361BE804E200F86B42 /* XLFormDescriptorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormDescriptorCell.h; sourceTree = "<group>"; };
|
||||
E267FD371BE804E200F86B42 /* XLFormInlineRowDescriptorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormInlineRowDescriptorCell.h; sourceTree = "<group>"; };
|
||||
E267FD381BE804E200F86B42 /* XLFormInlineSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormInlineSelectorCell.h; sourceTree = "<group>"; };
|
||||
E267FD391BE804E200F86B42 /* XLFormInlineSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormInlineSelectorCell.m; sourceTree = "<group>"; };
|
||||
E267FD3A1BE804E200F86B42 /* XLFormLeftRightSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormLeftRightSelectorCell.h; sourceTree = "<group>"; };
|
||||
E267FD3B1BE804E200F86B42 /* XLFormLeftRightSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormLeftRightSelectorCell.m; sourceTree = "<group>"; };
|
||||
E267FD3C1BE804E200F86B42 /* XLFormPickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormPickerCell.h; sourceTree = "<group>"; };
|
||||
E267FD3D1BE804E200F86B42 /* XLFormPickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormPickerCell.m; sourceTree = "<group>"; };
|
||||
E267FD3E1BE804E200F86B42 /* XLFormSegmentedCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormSegmentedCell.h; sourceTree = "<group>"; };
|
||||
E267FD3F1BE804E200F86B42 /* XLFormSegmentedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormSegmentedCell.m; sourceTree = "<group>"; };
|
||||
E267FD401BE804E200F86B42 /* XLFormSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormSelectorCell.h; sourceTree = "<group>"; };
|
||||
E267FD411BE804E200F86B42 /* XLFormSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormSelectorCell.m; sourceTree = "<group>"; };
|
||||
E267FD421BE804E200F86B42 /* XLFormSliderCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormSliderCell.h; sourceTree = "<group>"; };
|
||||
E267FD431BE804E200F86B42 /* XLFormSliderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormSliderCell.m; sourceTree = "<group>"; };
|
||||
E267FD441BE804E200F86B42 /* XLFormStepCounterCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormStepCounterCell.h; sourceTree = "<group>"; };
|
||||
E267FD451BE804E200F86B42 /* XLFormStepCounterCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormStepCounterCell.m; sourceTree = "<group>"; };
|
||||
E267FD461BE804E200F86B42 /* XLFormSwitchCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormSwitchCell.h; sourceTree = "<group>"; };
|
||||
E267FD471BE804E200F86B42 /* XLFormSwitchCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormSwitchCell.m; sourceTree = "<group>"; };
|
||||
E267FD481BE804E200F86B42 /* XLFormTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormTextFieldCell.h; sourceTree = "<group>"; };
|
||||
E267FD491BE804E200F86B42 /* XLFormTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormTextFieldCell.m; sourceTree = "<group>"; };
|
||||
E267FD4A1BE804E200F86B42 /* XLFormTextViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormTextViewCell.h; sourceTree = "<group>"; };
|
||||
E267FD4B1BE804E200F86B42 /* XLFormTextViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormTextViewCell.m; sourceTree = "<group>"; };
|
||||
E267FD4D1BE804E200F86B42 /* XLFormOptionsObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormOptionsObject.h; sourceTree = "<group>"; };
|
||||
E267FD4E1BE804E200F86B42 /* XLFormOptionsObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormOptionsObject.m; sourceTree = "<group>"; };
|
||||
E267FD4F1BE804E200F86B42 /* XLFormOptionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormOptionsViewController.h; sourceTree = "<group>"; };
|
||||
E267FD501BE804E200F86B42 /* XLFormOptionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormOptionsViewController.m; sourceTree = "<group>"; };
|
||||
E267FD511BE804E200F86B42 /* XLFormRowDescriptorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormRowDescriptorViewController.h; sourceTree = "<group>"; };
|
||||
E267FD521BE804E200F86B42 /* XLFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormViewController.h; sourceTree = "<group>"; };
|
||||
E267FD531BE804E200F86B42 /* XLFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormViewController.m; sourceTree = "<group>"; };
|
||||
E267FD551BE804E200F86B42 /* XLFormDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormDescriptor.h; sourceTree = "<group>"; };
|
||||
E267FD561BE804E200F86B42 /* XLFormDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormDescriptor.m; sourceTree = "<group>"; };
|
||||
E267FD571BE804E200F86B42 /* XLFormDescriptorDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormDescriptorDelegate.h; sourceTree = "<group>"; };
|
||||
E267FD581BE804E200F86B42 /* XLFormRowDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormRowDescriptor.h; sourceTree = "<group>"; };
|
||||
E267FD591BE804E200F86B42 /* XLFormRowDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormRowDescriptor.m; sourceTree = "<group>"; };
|
||||
E267FD5A1BE804E200F86B42 /* XLFormSectionDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormSectionDescriptor.h; sourceTree = "<group>"; };
|
||||
E267FD5B1BE804E200F86B42 /* XLFormSectionDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormSectionDescriptor.m; sourceTree = "<group>"; };
|
||||
E267FD5D1BE804E200F86B42 /* NSArray+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
E267FD5E1BE804E200F86B42 /* NSArray+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
E267FD5F1BE804E200F86B42 /* NSExpression+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSExpression+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
E267FD601BE804E200F86B42 /* NSExpression+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSExpression+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
E267FD611BE804E200F86B42 /* NSObject+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
E267FD621BE804E200F86B42 /* NSObject+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
E267FD631BE804E200F86B42 /* NSPredicate+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
E267FD641BE804E200F86B42 /* NSPredicate+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSPredicate+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
E267FD651BE804E200F86B42 /* NSString+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
E267FD661BE804E200F86B42 /* NSString+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
E267FD671BE804E200F86B42 /* UIView+XLFormAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+XLFormAdditions.h"; sourceTree = "<group>"; };
|
||||
E267FD681BE804E200F86B42 /* UIView+XLFormAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+XLFormAdditions.m"; sourceTree = "<group>"; };
|
||||
E267FD6A1BE804E200F86B42 /* XLFormRightDetailCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormRightDetailCell.h; sourceTree = "<group>"; };
|
||||
E267FD6B1BE804E200F86B42 /* XLFormRightDetailCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormRightDetailCell.m; sourceTree = "<group>"; };
|
||||
E267FD6C1BE804E200F86B42 /* XLFormRightImageButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormRightImageButton.h; sourceTree = "<group>"; };
|
||||
E267FD6D1BE804E200F86B42 /* XLFormRightImageButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormRightImageButton.m; sourceTree = "<group>"; };
|
||||
E267FD6E1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormRowNavigationAccessoryView.h; sourceTree = "<group>"; };
|
||||
E267FD6F1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormRowNavigationAccessoryView.m; sourceTree = "<group>"; };
|
||||
E267FD701BE804E200F86B42 /* XLFormTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormTextView.h; sourceTree = "<group>"; };
|
||||
E267FD711BE804E200F86B42 /* XLFormTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormTextView.m; sourceTree = "<group>"; };
|
||||
E267FD731BE804E200F86B42 /* XLFormRegexValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormRegexValidator.h; sourceTree = "<group>"; };
|
||||
E267FD741BE804E200F86B42 /* XLFormRegexValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormRegexValidator.m; sourceTree = "<group>"; };
|
||||
E267FD751BE804E200F86B42 /* XLFormValidationStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormValidationStatus.h; sourceTree = "<group>"; };
|
||||
E267FD761BE804E200F86B42 /* XLFormValidationStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormValidationStatus.m; sourceTree = "<group>"; };
|
||||
E267FD771BE804E200F86B42 /* XLFormValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormValidator.h; sourceTree = "<group>"; };
|
||||
E267FD781BE804E200F86B42 /* XLFormValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLFormValidator.m; sourceTree = "<group>"; };
|
||||
E267FD791BE804E200F86B42 /* XLFormValidatorProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLFormValidatorProtocol.h; sourceTree = "<group>"; };
|
||||
E267FD7A1BE804E200F86B42 /* XLForm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLForm.h; path = XL/XLForm.h; sourceTree = "<group>"; };
|
||||
E267FD7B1BE804E200F86B42 /* XLForm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLForm.m; path = XL/XLForm.m; sourceTree = "<group>"; };
|
||||
E267FDC71BE806D000F86B42 /* XLForm.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = XLForm.bundle; sourceTree = "<group>"; };
|
||||
@@ -216,124 +216,119 @@
|
||||
E267FD2B1BE804E200F86B42 /* Cell */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E267FD2C1BE804E200F86B42 /* XLFormBaseCell.h */,
|
||||
E267FD2D1BE804E200F86B42 /* XLFormBaseCell.m */,
|
||||
E267FD2E1BE804E200F86B42 /* XLFormButtonCell.h */,
|
||||
E267FD2F1BE804E200F86B42 /* XLFormButtonCell.m */,
|
||||
E267FD301BE804E200F86B42 /* XLFormCheckCell.h */,
|
||||
E267FD311BE804E200F86B42 /* XLFormCheckCell.m */,
|
||||
E267FD321BE804E200F86B42 /* XLFormDateCell.h */,
|
||||
E267FD331BE804E200F86B42 /* XLFormDateCell.m */,
|
||||
E267FD341BE804E200F86B42 /* XLFormDatePickerCell.h */,
|
||||
E267FD351BE804E200F86B42 /* XLFormDatePickerCell.m */,
|
||||
E267FD361BE804E200F86B42 /* XLFormDescriptorCell.h */,
|
||||
6442F64E1C1FC3AA00C9152F /* XLFormImageCell.h */,
|
||||
6442F64F1C1FC3AA00C9152F /* XLFormImageCell.m */,
|
||||
E267FD371BE804E200F86B42 /* XLFormInlineRowDescriptorCell.h */,
|
||||
E267FD381BE804E200F86B42 /* XLFormInlineSelectorCell.h */,
|
||||
E267FD391BE804E200F86B42 /* XLFormInlineSelectorCell.m */,
|
||||
E267FD3A1BE804E200F86B42 /* XLFormLeftRightSelectorCell.h */,
|
||||
E267FD3B1BE804E200F86B42 /* XLFormLeftRightSelectorCell.m */,
|
||||
E267FD3C1BE804E200F86B42 /* XLFormPickerCell.h */,
|
||||
E267FD3D1BE804E200F86B42 /* XLFormPickerCell.m */,
|
||||
E267FD3E1BE804E200F86B42 /* XLFormSegmentedCell.h */,
|
||||
E267FD3F1BE804E200F86B42 /* XLFormSegmentedCell.m */,
|
||||
E267FD401BE804E200F86B42 /* XLFormSelectorCell.h */,
|
||||
E267FD411BE804E200F86B42 /* XLFormSelectorCell.m */,
|
||||
E267FD421BE804E200F86B42 /* XLFormSliderCell.h */,
|
||||
E267FD431BE804E200F86B42 /* XLFormSliderCell.m */,
|
||||
E267FD441BE804E200F86B42 /* XLFormStepCounterCell.h */,
|
||||
E267FD451BE804E200F86B42 /* XLFormStepCounterCell.m */,
|
||||
E267FD461BE804E200F86B42 /* XLFormSwitchCell.h */,
|
||||
E267FD471BE804E200F86B42 /* XLFormSwitchCell.m */,
|
||||
E267FD481BE804E200F86B42 /* XLFormTextFieldCell.h */,
|
||||
E267FD491BE804E200F86B42 /* XLFormTextFieldCell.m */,
|
||||
E267FD4A1BE804E200F86B42 /* XLFormTextViewCell.h */,
|
||||
E267FD4B1BE804E200F86B42 /* XLFormTextViewCell.m */,
|
||||
9C2695072513CEFC0059594E /* XLFormBaseCell.h */,
|
||||
9C2695152513CEFE0059594E /* XLFormBaseCell.m */,
|
||||
9C26950A2513CEFC0059594E /* XLFormButtonCell.h */,
|
||||
9C26950B2513CEFC0059594E /* XLFormButtonCell.m */,
|
||||
9C26950E2513CEFD0059594E /* XLFormCheckCell.h */,
|
||||
9C2695082513CEFC0059594E /* XLFormCheckCell.m */,
|
||||
9C2695182513CEFF0059594E /* XLFormDateCell.h */,
|
||||
9C2695132513CEFE0059594E /* XLFormDateCell.m */,
|
||||
9C2695092513CEFC0059594E /* XLFormDatePickerCell.h */,
|
||||
9C26950D2513CEFD0059594E /* XLFormDatePickerCell.m */,
|
||||
9C2695162513CEFE0059594E /* XLFormDescriptorCell.h */,
|
||||
9C26950F2513CEFD0059594E /* XLFormImageCell.h */,
|
||||
9C2695172513CEFE0059594E /* XLFormImageCell.m */,
|
||||
9C2695122513CEFE0059594E /* XLFormInlineRowDescriptorCell.h */,
|
||||
9C26950C2513CEFC0059594E /* XLFormInlineSelectorCell.h */,
|
||||
9C2695142513CEFE0059594E /* XLFormInlineSelectorCell.m */,
|
||||
9C2695102513CEFD0059594E /* XLFormLeftRightSelectorCell.h */,
|
||||
9C2695112513CEFE0059594E /* XLFormLeftRightSelectorCell.m */,
|
||||
9C2695362513CFA70059594E /* XLFormPickerCell.h */,
|
||||
9C26952C2513CFA60059594E /* XLFormPickerCell.m */,
|
||||
9C2695392513CFA70059594E /* XLFormSegmentedCell.h */,
|
||||
9C2695352513CFA70059594E /* XLFormSegmentedCell.m */,
|
||||
9C26953A2513CFA70059594E /* XLFormSelectorCell.h */,
|
||||
9C26952E2513CFA60059594E /* XLFormSelectorCell.m */,
|
||||
9C2695332513CFA60059594E /* XLFormSliderCell.h */,
|
||||
9C26952D2513CFA60059594E /* XLFormSliderCell.m */,
|
||||
9C2695312513CFA60059594E /* XLFormStepCounterCell.h */,
|
||||
9C26952B2513CFA60059594E /* XLFormStepCounterCell.m */,
|
||||
9C2695382513CFA70059594E /* XLFormSwitchCell.h */,
|
||||
9C2695372513CFA70059594E /* XLFormSwitchCell.m */,
|
||||
9C2695322513CFA60059594E /* XLFormTextFieldCell.h */,
|
||||
9C2695302513CFA60059594E /* XLFormTextFieldCell.m */,
|
||||
9C2695342513CFA60059594E /* XLFormTextViewCell.h */,
|
||||
9C26952F2513CFA60059594E /* XLFormTextViewCell.m */,
|
||||
);
|
||||
name = Cell;
|
||||
path = XL/Cell;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E267FD4C1BE804E200F86B42 /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E267FD4D1BE804E200F86B42 /* XLFormOptionsObject.h */,
|
||||
E267FD4E1BE804E200F86B42 /* XLFormOptionsObject.m */,
|
||||
E267FD4F1BE804E200F86B42 /* XLFormOptionsViewController.h */,
|
||||
E267FD501BE804E200F86B42 /* XLFormOptionsViewController.m */,
|
||||
E267FD511BE804E200F86B42 /* XLFormRowDescriptorViewController.h */,
|
||||
E267FD521BE804E200F86B42 /* XLFormViewController.h */,
|
||||
E267FD531BE804E200F86B42 /* XLFormViewController.m */,
|
||||
9C2695502513CFF50059594E /* XLFormOptionsObject.h */,
|
||||
9C26954E2513CFF50059594E /* XLFormOptionsObject.m */,
|
||||
9C26954F2513CFF50059594E /* XLFormOptionsViewController.h */,
|
||||
9C2695512513CFF50059594E /* XLFormOptionsViewController.m */,
|
||||
9C26954D2513CFF50059594E /* XLFormRowDescriptorViewController.h */,
|
||||
9C26954B2513CFF50059594E /* XLFormViewController.h */,
|
||||
9C26954C2513CFF50059594E /* XLFormViewController.m */,
|
||||
);
|
||||
name = Controllers;
|
||||
path = XL/Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E267FD541BE804E200F86B42 /* Descriptors */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E267FD551BE804E200F86B42 /* XLFormDescriptor.h */,
|
||||
E267FD561BE804E200F86B42 /* XLFormDescriptor.m */,
|
||||
E267FD571BE804E200F86B42 /* XLFormDescriptorDelegate.h */,
|
||||
E267FD581BE804E200F86B42 /* XLFormRowDescriptor.h */,
|
||||
E267FD591BE804E200F86B42 /* XLFormRowDescriptor.m */,
|
||||
E267FD5A1BE804E200F86B42 /* XLFormSectionDescriptor.h */,
|
||||
E267FD5B1BE804E200F86B42 /* XLFormSectionDescriptor.m */,
|
||||
9C26955F2513D0230059594E /* XLFormDescriptor.h */,
|
||||
9C26955D2513D0230059594E /* XLFormDescriptor.m */,
|
||||
9C2695592513D0230059594E /* XLFormDescriptorDelegate.h */,
|
||||
9C26955C2513D0230059594E /* XLFormRowDescriptor.h */,
|
||||
9C26955A2513D0230059594E /* XLFormRowDescriptor.m */,
|
||||
9C26955B2513D0230059594E /* XLFormSectionDescriptor.h */,
|
||||
9C26955E2513D0230059594E /* XLFormSectionDescriptor.m */,
|
||||
);
|
||||
name = Descriptors;
|
||||
path = XL/Descriptors;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E267FD5C1BE804E200F86B42 /* Helpers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E267FD5D1BE804E200F86B42 /* NSArray+XLFormAdditions.h */,
|
||||
E267FD5E1BE804E200F86B42 /* NSArray+XLFormAdditions.m */,
|
||||
E267FD5F1BE804E200F86B42 /* NSExpression+XLFormAdditions.h */,
|
||||
E267FD601BE804E200F86B42 /* NSExpression+XLFormAdditions.m */,
|
||||
E267FD611BE804E200F86B42 /* NSObject+XLFormAdditions.h */,
|
||||
E267FD621BE804E200F86B42 /* NSObject+XLFormAdditions.m */,
|
||||
E267FD631BE804E200F86B42 /* NSPredicate+XLFormAdditions.h */,
|
||||
E267FD641BE804E200F86B42 /* NSPredicate+XLFormAdditions.m */,
|
||||
E267FD651BE804E200F86B42 /* NSString+XLFormAdditions.h */,
|
||||
E267FD661BE804E200F86B42 /* NSString+XLFormAdditions.m */,
|
||||
E267FD671BE804E200F86B42 /* UIView+XLFormAdditions.h */,
|
||||
E267FD681BE804E200F86B42 /* UIView+XLFormAdditions.m */,
|
||||
9C2695672513D0510059594E /* NSArray+XLFormAdditions.h */,
|
||||
9C26956D2513D0510059594E /* NSArray+XLFormAdditions.m */,
|
||||
9C2695692513D0510059594E /* NSExpression+XLFormAdditions.h */,
|
||||
9C26956E2513D0510059594E /* NSExpression+XLFormAdditions.m */,
|
||||
9C26956A2513D0510059594E /* NSObject+XLFormAdditions.h */,
|
||||
9C2695712513D0510059594E /* NSObject+XLFormAdditions.m */,
|
||||
9C26956B2513D0510059594E /* NSPredicate+XLFormAdditions.h */,
|
||||
9C26956F2513D0510059594E /* NSPredicate+XLFormAdditions.m */,
|
||||
9C2695722513D0520059594E /* NSString+XLFormAdditions.h */,
|
||||
9C2695682513D0510059594E /* NSString+XLFormAdditions.m */,
|
||||
9C2695702513D0510059594E /* UIView+XLFormAdditions.h */,
|
||||
9C26956C2513D0510059594E /* UIView+XLFormAdditions.m */,
|
||||
E267FD691BE804E200F86B42 /* Views */,
|
||||
);
|
||||
name = Helpers;
|
||||
path = XL/Helpers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E267FD691BE804E200F86B42 /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E267FD6A1BE804E200F86B42 /* XLFormRightDetailCell.h */,
|
||||
E267FD6B1BE804E200F86B42 /* XLFormRightDetailCell.m */,
|
||||
E267FD6C1BE804E200F86B42 /* XLFormRightImageButton.h */,
|
||||
E267FD6D1BE804E200F86B42 /* XLFormRightImageButton.m */,
|
||||
E267FD6E1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.h */,
|
||||
E267FD6F1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.m */,
|
||||
E267FD701BE804E200F86B42 /* XLFormTextView.h */,
|
||||
E267FD711BE804E200F86B42 /* XLFormTextView.m */,
|
||||
9C2695802513D0950059594E /* XLFormRightDetailCell.h */,
|
||||
9C2695862513D0960059594E /* XLFormRightDetailCell.m */,
|
||||
9C26957F2513D0950059594E /* XLFormRightImageButton.h */,
|
||||
9C2695852513D0950059594E /* XLFormRightImageButton.m */,
|
||||
9C2695842513D0950059594E /* XLFormRowNavigationAccessoryView.h */,
|
||||
9C2695822513D0950059594E /* XLFormRowNavigationAccessoryView.m */,
|
||||
9C2695812513D0950059594E /* XLFormTextView.h */,
|
||||
9C2695832513D0950059594E /* XLFormTextView.m */,
|
||||
);
|
||||
path = Views;
|
||||
name = Views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E267FD721BE804E200F86B42 /* Validation */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E267FD731BE804E200F86B42 /* XLFormRegexValidator.h */,
|
||||
E267FD741BE804E200F86B42 /* XLFormRegexValidator.m */,
|
||||
E267FD751BE804E200F86B42 /* XLFormValidationStatus.h */,
|
||||
E267FD761BE804E200F86B42 /* XLFormValidationStatus.m */,
|
||||
E267FD771BE804E200F86B42 /* XLFormValidator.h */,
|
||||
E267FD781BE804E200F86B42 /* XLFormValidator.m */,
|
||||
E267FD791BE804E200F86B42 /* XLFormValidatorProtocol.h */,
|
||||
9C2695922513D0CF0059594E /* XLFormRegexValidator.h */,
|
||||
9C2695932513D0D00059594E /* XLFormRegexValidator.m */,
|
||||
9C26958F2513D0CF0059594E /* XLFormValidationStatus.h */,
|
||||
9C2695902513D0CF0059594E /* XLFormValidationStatus.m */,
|
||||
9C2695912513D0CF0059594E /* XLFormValidator.h */,
|
||||
9C2695952513D0D00059594E /* XLFormValidator.m */,
|
||||
9C2695942513D0D00059594E /* XLFormValidatorProtocol.h */,
|
||||
);
|
||||
name = Validation;
|
||||
path = XL/Validation;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
@@ -343,47 +338,47 @@
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E267FD881BE804E200F86B42 /* XLFormInlineSelectorCell.h in Headers */,
|
||||
E267FD871BE804E200F86B42 /* XLFormInlineRowDescriptorCell.h in Headers */,
|
||||
E267FDA11BE804E200F86B42 /* XLFormViewController.h in Headers */,
|
||||
E267FD9C1BE804E200F86B42 /* XLFormOptionsObject.h in Headers */,
|
||||
E267FD7E1BE804E200F86B42 /* XLFormButtonCell.h in Headers */,
|
||||
E267FD841BE804E200F86B42 /* XLFormDatePickerCell.h in Headers */,
|
||||
E267FD961BE804E200F86B42 /* XLFormSwitchCell.h in Headers */,
|
||||
E267FDA61BE804E200F86B42 /* XLFormRowDescriptor.h in Headers */,
|
||||
E267FD901BE804E200F86B42 /* XLFormSelectorCell.h in Headers */,
|
||||
E267FDA81BE804E200F86B42 /* XLFormSectionDescriptor.h in Headers */,
|
||||
E267FDAE1BE804E200F86B42 /* NSObject+XLFormAdditions.h in Headers */,
|
||||
E267FD9E1BE804E200F86B42 /* XLFormOptionsViewController.h in Headers */,
|
||||
E267FD821BE804E200F86B42 /* XLFormDateCell.h in Headers */,
|
||||
E267FD801BE804E200F86B42 /* XLFormCheckCell.h in Headers */,
|
||||
E267FD8E1BE804E200F86B42 /* XLFormSegmentedCell.h in Headers */,
|
||||
E267FD8A1BE804E200F86B42 /* XLFormLeftRightSelectorCell.h in Headers */,
|
||||
E267FD921BE804E200F86B42 /* XLFormSliderCell.h in Headers */,
|
||||
E267FD941BE804E200F86B42 /* XLFormStepCounterCell.h in Headers */,
|
||||
E267FDBA1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.h in Headers */,
|
||||
E267FDAA1BE804E200F86B42 /* NSArray+XLFormAdditions.h in Headers */,
|
||||
E267FDB21BE804E200F86B42 /* NSString+XLFormAdditions.h in Headers */,
|
||||
E267FDB81BE804E200F86B42 /* XLFormRightImageButton.h in Headers */,
|
||||
E267FDA51BE804E200F86B42 /* XLFormDescriptorDelegate.h in Headers */,
|
||||
E267FDC41BE804E200F86B42 /* XLFormValidatorProtocol.h in Headers */,
|
||||
E267FDC21BE804E200F86B42 /* XLFormValidator.h in Headers */,
|
||||
E267FDAC1BE804E200F86B42 /* NSExpression+XLFormAdditions.h in Headers */,
|
||||
E267FDB61BE804E200F86B42 /* XLFormRightDetailCell.h in Headers */,
|
||||
E267FDB01BE804E200F86B42 /* NSPredicate+XLFormAdditions.h in Headers */,
|
||||
E267FDBC1BE804E200F86B42 /* XLFormTextView.h in Headers */,
|
||||
E267FDC01BE804E200F86B42 /* XLFormValidationStatus.h in Headers */,
|
||||
E267FDB41BE804E200F86B42 /* UIView+XLFormAdditions.h in Headers */,
|
||||
E267FD8C1BE804E200F86B42 /* XLFormPickerCell.h in Headers */,
|
||||
E267FDBE1BE804E200F86B42 /* XLFormRegexValidator.h in Headers */,
|
||||
E267FD9A1BE804E200F86B42 /* XLFormTextViewCell.h in Headers */,
|
||||
9C2695202513CEFF0059594E /* XLFormCheckCell.h in Headers */,
|
||||
9C26952A2513CEFF0059594E /* XLFormDateCell.h in Headers */,
|
||||
9C2695602513D0230059594E /* XLFormDescriptorDelegate.h in Headers */,
|
||||
9C2695962513D0D00059594E /* XLFormValidationStatus.h in Headers */,
|
||||
9C2695562513CFF50059594E /* XLFormOptionsViewController.h in Headers */,
|
||||
9C2695522513CFF50059594E /* XLFormViewController.h in Headers */,
|
||||
9C2695192513CEFF0059594E /* XLFormBaseCell.h in Headers */,
|
||||
9C2695542513CFF50059594E /* XLFormRowDescriptorViewController.h in Headers */,
|
||||
9C2695772513D0520059594E /* NSPredicate+XLFormAdditions.h in Headers */,
|
||||
9C2695992513D0D00059594E /* XLFormRegexValidator.h in Headers */,
|
||||
9C2695242513CEFF0059594E /* XLFormInlineRowDescriptorCell.h in Headers */,
|
||||
9C26957E2513D0520059594E /* NSString+XLFormAdditions.h in Headers */,
|
||||
9C26957C2513D0520059594E /* UIView+XLFormAdditions.h in Headers */,
|
||||
9C2695222513CEFF0059594E /* XLFormLeftRightSelectorCell.h in Headers */,
|
||||
9C2695632513D0230059594E /* XLFormRowDescriptor.h in Headers */,
|
||||
9C2695282513CEFF0059594E /* XLFormDescriptorCell.h in Headers */,
|
||||
9C2695622513D0230059594E /* XLFormSectionDescriptor.h in Headers */,
|
||||
9C2695572513CFF50059594E /* XLFormOptionsObject.h in Headers */,
|
||||
9C2695432513CFA70059594E /* XLFormSliderCell.h in Headers */,
|
||||
9C2695482513CFA70059594E /* XLFormSwitchCell.h in Headers */,
|
||||
9C2695412513CFA70059594E /* XLFormStepCounterCell.h in Headers */,
|
||||
9C2695422513CFA70059594E /* XLFormTextFieldCell.h in Headers */,
|
||||
9C2695892513D0960059594E /* XLFormTextView.h in Headers */,
|
||||
9C26951C2513CEFF0059594E /* XLFormButtonCell.h in Headers */,
|
||||
9C26959B2513D0D00059594E /* XLFormValidatorProtocol.h in Headers */,
|
||||
9C2695752513D0520059594E /* NSExpression+XLFormAdditions.h in Headers */,
|
||||
9C2695872513D0960059594E /* XLFormRightImageButton.h in Headers */,
|
||||
9C2695442513CFA70059594E /* XLFormTextViewCell.h in Headers */,
|
||||
9C2695762513D0520059594E /* NSObject+XLFormAdditions.h in Headers */,
|
||||
9C26954A2513CFA70059594E /* XLFormSelectorCell.h in Headers */,
|
||||
9C2695982513D0D00059594E /* XLFormValidator.h in Headers */,
|
||||
E267FDC51BE804E200F86B42 /* XLForm.h in Headers */,
|
||||
E267FDA31BE804E200F86B42 /* XLFormDescriptor.h in Headers */,
|
||||
E267FD981BE804E200F86B42 /* XLFormTextFieldCell.h in Headers */,
|
||||
E267FD7C1BE804E200F86B42 /* XLFormBaseCell.h in Headers */,
|
||||
E267FD861BE804E200F86B42 /* XLFormDescriptorCell.h in Headers */,
|
||||
6442F6501C1FC3AA00C9152F /* XLFormImageCell.h in Headers */,
|
||||
E267FDA01BE804E200F86B42 /* XLFormRowDescriptorViewController.h in Headers */,
|
||||
9C26958C2513D0960059594E /* XLFormRowNavigationAccessoryView.h in Headers */,
|
||||
9C2695662513D0230059594E /* XLFormDescriptor.h in Headers */,
|
||||
9C2695882513D0960059594E /* XLFormRightDetailCell.h in Headers */,
|
||||
9C26951E2513CEFF0059594E /* XLFormInlineSelectorCell.h in Headers */,
|
||||
9C2695732513D0520059594E /* NSArray+XLFormAdditions.h in Headers */,
|
||||
9C2695212513CEFF0059594E /* XLFormImageCell.h in Headers */,
|
||||
9C26951B2513CEFF0059594E /* XLFormDatePickerCell.h in Headers */,
|
||||
9C2695462513CFA70059594E /* XLFormPickerCell.h in Headers */,
|
||||
9C2695492513CFA70059594E /* XLFormSegmentedCell.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -414,11 +409,12 @@
|
||||
E267FD171BE8048900F86B42 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0900;
|
||||
LastUpgradeCheck = 0940;
|
||||
ORGANIZATIONNAME = XLForm;
|
||||
TargetAttributes = {
|
||||
E267FD1F1BE8048900F86B42 = {
|
||||
CreatedOnToolsVersion = 7.1;
|
||||
LastSwiftMigration = 1170;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -427,6 +423,7 @@
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
English,
|
||||
en,
|
||||
);
|
||||
mainGroup = E267FD161BE8048900F86B42;
|
||||
@@ -455,42 +452,42 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E267FDB51BE804E200F86B42 /* UIView+XLFormAdditions.m in Sources */,
|
||||
E267FDC11BE804E200F86B42 /* XLFormValidationStatus.m in Sources */,
|
||||
E267FDBD1BE804E200F86B42 /* XLFormTextView.m in Sources */,
|
||||
E267FDB91BE804E200F86B42 /* XLFormRightImageButton.m in Sources */,
|
||||
E267FDAB1BE804E200F86B42 /* NSArray+XLFormAdditions.m in Sources */,
|
||||
E267FD811BE804E200F86B42 /* XLFormCheckCell.m in Sources */,
|
||||
E267FDB71BE804E200F86B42 /* XLFormRightDetailCell.m in Sources */,
|
||||
E267FD831BE804E200F86B42 /* XLFormDateCell.m in Sources */,
|
||||
E267FD9B1BE804E200F86B42 /* XLFormTextViewCell.m in Sources */,
|
||||
E267FD8F1BE804E200F86B42 /* XLFormSegmentedCell.m in Sources */,
|
||||
E267FDAD1BE804E200F86B42 /* NSExpression+XLFormAdditions.m in Sources */,
|
||||
E267FDBF1BE804E200F86B42 /* XLFormRegexValidator.m in Sources */,
|
||||
E267FDC31BE804E200F86B42 /* XLFormValidator.m in Sources */,
|
||||
E267FD931BE804E200F86B42 /* XLFormSliderCell.m in Sources */,
|
||||
E267FDB11BE804E200F86B42 /* NSPredicate+XLFormAdditions.m in Sources */,
|
||||
E267FDA41BE804E200F86B42 /* XLFormDescriptor.m in Sources */,
|
||||
E267FD8B1BE804E200F86B42 /* XLFormLeftRightSelectorCell.m in Sources */,
|
||||
E267FD9F1BE804E200F86B42 /* XLFormOptionsViewController.m in Sources */,
|
||||
E267FD8D1BE804E200F86B42 /* XLFormPickerCell.m in Sources */,
|
||||
E267FD951BE804E200F86B42 /* XLFormStepCounterCell.m in Sources */,
|
||||
E267FDBB1BE804E200F86B42 /* XLFormRowNavigationAccessoryView.m in Sources */,
|
||||
E267FD7D1BE804E200F86B42 /* XLFormBaseCell.m in Sources */,
|
||||
E267FDA21BE804E200F86B42 /* XLFormViewController.m in Sources */,
|
||||
E267FDB31BE804E200F86B42 /* NSString+XLFormAdditions.m in Sources */,
|
||||
E267FD851BE804E200F86B42 /* XLFormDatePickerCell.m in Sources */,
|
||||
E267FDAF1BE804E200F86B42 /* NSObject+XLFormAdditions.m in Sources */,
|
||||
E267FD991BE804E200F86B42 /* XLFormTextFieldCell.m in Sources */,
|
||||
E267FD9D1BE804E200F86B42 /* XLFormOptionsObject.m in Sources */,
|
||||
E267FD7F1BE804E200F86B42 /* XLFormButtonCell.m in Sources */,
|
||||
E267FD911BE804E200F86B42 /* XLFormSelectorCell.m in Sources */,
|
||||
E267FDA91BE804E200F86B42 /* XLFormSectionDescriptor.m in Sources */,
|
||||
6442F6511C1FC3AA00C9152F /* XLFormImageCell.m in Sources */,
|
||||
E267FD971BE804E200F86B42 /* XLFormSwitchCell.m in Sources */,
|
||||
9C2695782513D0520059594E /* UIView+XLFormAdditions.m in Sources */,
|
||||
9C26953C2513CFA70059594E /* XLFormPickerCell.m in Sources */,
|
||||
9C2695612513D0230059594E /* XLFormRowDescriptor.m in Sources */,
|
||||
9C26953E2513CFA70059594E /* XLFormSelectorCell.m in Sources */,
|
||||
9C26959C2513D0D00059594E /* XLFormValidator.m in Sources */,
|
||||
9C2695402513CFA70059594E /* XLFormTextFieldCell.m in Sources */,
|
||||
9C26959A2513D0D00059594E /* XLFormRegexValidator.m in Sources */,
|
||||
9C26957A2513D0520059594E /* NSExpression+XLFormAdditions.m in Sources */,
|
||||
9C26953F2513CFA70059594E /* XLFormTextViewCell.m in Sources */,
|
||||
9C2695262513CEFF0059594E /* XLFormInlineSelectorCell.m in Sources */,
|
||||
9C2695552513CFF50059594E /* XLFormOptionsObject.m in Sources */,
|
||||
9C2695452513CFA70059594E /* XLFormSegmentedCell.m in Sources */,
|
||||
9C2695972513D0D00059594E /* XLFormValidationStatus.m in Sources */,
|
||||
9C2695582513CFF50059594E /* XLFormOptionsViewController.m in Sources */,
|
||||
9C26951D2513CEFF0059594E /* XLFormButtonCell.m in Sources */,
|
||||
9C26957B2513D0520059594E /* NSPredicate+XLFormAdditions.m in Sources */,
|
||||
9C26951F2513CEFF0059594E /* XLFormDatePickerCell.m in Sources */,
|
||||
9C2695472513CFA70059594E /* XLFormSwitchCell.m in Sources */,
|
||||
9C26958B2513D0960059594E /* XLFormTextView.m in Sources */,
|
||||
9C2695642513D0230059594E /* XLFormDescriptor.m in Sources */,
|
||||
9C26953D2513CFA70059594E /* XLFormSliderCell.m in Sources */,
|
||||
9C2695742513D0520059594E /* NSString+XLFormAdditions.m in Sources */,
|
||||
9C2695232513CEFF0059594E /* XLFormLeftRightSelectorCell.m in Sources */,
|
||||
9C26958D2513D0960059594E /* XLFormRightImageButton.m in Sources */,
|
||||
9C26958A2513D0960059594E /* XLFormRowNavigationAccessoryView.m in Sources */,
|
||||
9C26953B2513CFA70059594E /* XLFormStepCounterCell.m in Sources */,
|
||||
9C2695532513CFF50059594E /* XLFormViewController.m in Sources */,
|
||||
9C26951A2513CEFF0059594E /* XLFormCheckCell.m in Sources */,
|
||||
9C2695292513CEFF0059594E /* XLFormImageCell.m in Sources */,
|
||||
9C2695272513CEFF0059594E /* XLFormBaseCell.m in Sources */,
|
||||
9C2695252513CEFF0059594E /* XLFormDateCell.m in Sources */,
|
||||
9C26958E2513D0960059594E /* XLFormRightDetailCell.m in Sources */,
|
||||
9C2695652513D0230059594E /* XLFormSectionDescriptor.m in Sources */,
|
||||
9C26957D2513D0520059594E /* NSObject+XLFormAdditions.m in Sources */,
|
||||
9C2695792513D0520059594E /* NSArray+XLFormAdditions.m in Sources */,
|
||||
E267FDC61BE804E200F86B42 /* XLForm.m in Sources */,
|
||||
E267FD891BE804E200F86B42 /* XLFormInlineSelectorCell.m in Sources */,
|
||||
E267FDA71BE804E200F86B42 /* XLFormRowDescriptor.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -509,12 +506,14 @@
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
@@ -528,6 +527,7 @@
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
@@ -564,12 +564,14 @@
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
@@ -583,6 +585,7 @@
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
@@ -604,7 +607,9 @@
|
||||
E267FD291BE8048900F86B42 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
@@ -612,16 +617,21 @@
|
||||
INFOPLIST_FILE = XLForm/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
MARKETING_VERSION = 4.3.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.XLForm;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
E267FD2A1BE8048900F86B42 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
@@ -629,9 +639,11 @@
|
||||
INFOPLIST_FILE = XLForm/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
MARKETING_VERSION = 4.3.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.XLForm;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0900"
|
||||
LastUpgradeVersion = "0940"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -26,7 +26,6 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
language = ""
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
@@ -37,7 +36,6 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
language = ""
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@@ -27,6 +27,6 @@
|
||||
|
||||
@interface NSArray (XLFormAdditions)
|
||||
|
||||
-(NSInteger)formIndexForItem:(id)item;
|
||||
-(NSInteger)formIndexForItem:(nonnull id)item;
|
||||
|
||||
@end
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
@implementation NSArray (XLFormAdditions)
|
||||
|
||||
-(NSInteger)formIndexForItem:(id)item
|
||||
-(NSInteger)formIndexForItem:(nonnull id)item
|
||||
{
|
||||
for (id selectedValueItem in self) {
|
||||
if ([[selectedValueItem valueData] isEqual:[item valueData]]){
|
||||
+1
-1
@@ -28,6 +28,6 @@
|
||||
|
||||
@interface NSExpression (XLFormAdditions)
|
||||
|
||||
-(NSMutableArray*) getExpressionVars;
|
||||
-(nullable NSMutableArray*) getExpressionVars;
|
||||
|
||||
@end
|
||||
+1
-3
@@ -29,7 +29,7 @@
|
||||
@implementation NSExpression (XLFormAdditions)
|
||||
|
||||
|
||||
-(NSMutableArray*) getExpressionVars{
|
||||
-(nullable NSMutableArray*) getExpressionVars{
|
||||
switch (self.expressionType) {
|
||||
case NSFunctionExpressionType:{
|
||||
NSString* str = [NSString stringWithFormat:@"%@", self];
|
||||
@@ -38,11 +38,9 @@
|
||||
else
|
||||
str = [str substringFromIndex:1];
|
||||
return [[NSMutableArray alloc] initWithObjects: str, nil];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return nil;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
@interface NSObject (XLFormAdditions)
|
||||
|
||||
-(NSString *)displayText;
|
||||
-(id)valueData;
|
||||
-(nullable NSString *)displayText;
|
||||
-(nullable id)valueData;
|
||||
|
||||
@end
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
@implementation NSObject (XLFormAdditions)
|
||||
|
||||
-(NSString *)displayText
|
||||
-(nullable NSString *)displayText
|
||||
{
|
||||
if ([self conformsToProtocol:@protocol(XLFormOptionObject)]){
|
||||
return [(id<XLFormOptionObject>)self formDisplayText];
|
||||
@@ -40,7 +40,7 @@
|
||||
return nil;
|
||||
}
|
||||
|
||||
-(id)valueData
|
||||
-(nullable id)valueData
|
||||
{
|
||||
if ([self isKindOfClass:[NSString class]] || [self isKindOfClass:[NSNumber class]] || [self isKindOfClass:[NSDate class]]){
|
||||
return self;
|
||||
+1
-1
@@ -27,5 +27,5 @@
|
||||
|
||||
@interface NSPredicate (XLFormAdditions)
|
||||
|
||||
-(NSMutableArray*) getPredicateVars;
|
||||
-(nonnull NSMutableArray*) getPredicateVars;
|
||||
@end
|
||||
+1
-1
@@ -28,7 +28,7 @@
|
||||
@implementation NSPredicate (XLFormAdditions)
|
||||
|
||||
|
||||
-(NSMutableArray*) getPredicateVars{
|
||||
-(nonnull NSMutableArray*) getPredicateVars{
|
||||
NSMutableArray* ret = [[NSMutableArray alloc] init];
|
||||
if ([self isKindOfClass:([NSCompoundPredicate class])]) {
|
||||
for (id object in ((NSCompoundPredicate*) self).subpredicates ) {
|
||||
@@ -28,8 +28,8 @@
|
||||
|
||||
@interface NSString (XLFormAdditions)
|
||||
|
||||
-(NSPredicate *)formPredicate;
|
||||
-(nonnull NSPredicate *)formPredicate;
|
||||
|
||||
-(NSString *)formKeyForPredicateType:(XLPredicateType)predicateType;
|
||||
-(nonnull NSString *)formKeyForPredicateType:(XLPredicateType)predicateType;
|
||||
|
||||
@end
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
@implementation NSString (XLFormAdditions)
|
||||
|
||||
-(NSPredicate *)formPredicate
|
||||
-(nonnull NSPredicate *)formPredicate
|
||||
{
|
||||
// returns an array of strings where the first one is the new string with the correct replacements
|
||||
// and the rest are all the tags that appear in the string
|
||||
@@ -57,7 +57,7 @@
|
||||
}
|
||||
|
||||
|
||||
-(NSString *)formKeyForPredicateType:(XLPredicateType)predicateType
|
||||
-(nonnull NSString *)formKeyForPredicateType:(XLPredicateType)predicateType
|
||||
{
|
||||
return [NSString stringWithFormat:@"%@-%@", self, (predicateType == XLPredicateTypeHidden ? @"hidden" : @"disabled") ];
|
||||
}
|
||||
@@ -28,9 +28,9 @@
|
||||
|
||||
@interface UIView (XLFormAdditions)
|
||||
|
||||
+(id)autolayoutView;
|
||||
-(NSLayoutConstraint *)layoutConstraintSameHeightOf:(UIView *)view;
|
||||
-(UIView *)findFirstResponder;
|
||||
-(UITableViewCell<XLFormDescriptorCell> *)formDescriptorCell;
|
||||
+(nonnull instancetype)autolayoutView;
|
||||
-(nonnull NSLayoutConstraint *)layoutConstraintSameHeightOf:(nonnull UIView *)view;
|
||||
-(nullable UIView *)findFirstResponder;
|
||||
-(nullable UITableViewCell<XLFormDescriptorCell> *)formDescriptorCell;
|
||||
|
||||
@end
|
||||
@@ -27,47 +27,62 @@
|
||||
|
||||
@implementation UIView (XLFormAdditions)
|
||||
|
||||
+ (id)autolayoutView
|
||||
+ (nonnull instancetype)autolayoutView
|
||||
{
|
||||
UIView *view = [self new];
|
||||
__kindof UIView *view = [self new];
|
||||
view.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
-(NSLayoutConstraint *)layoutConstraintSameHeightOf:(UIView *)view
|
||||
- (nonnull NSLayoutConstraint *)layoutConstraintSameHeightOf:(nonnull UIView *)view
|
||||
{
|
||||
return [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f];
|
||||
return [NSLayoutConstraint constraintWithItem:self
|
||||
attribute:NSLayoutAttributeHeight
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:view
|
||||
attribute:NSLayoutAttributeHeight
|
||||
multiplier:1.0
|
||||
constant:0.0];
|
||||
}
|
||||
|
||||
- (UIView *)findFirstResponder
|
||||
- (nullable UIView *)findFirstResponder
|
||||
{
|
||||
UIView *firstResponder = nil;
|
||||
if (self.isFirstResponder) {
|
||||
return self;
|
||||
firstResponder = self;
|
||||
}
|
||||
for (UIView *subView in self.subviews) {
|
||||
UIView *firstResponder = [subView findFirstResponder];
|
||||
if (firstResponder != nil) {
|
||||
return firstResponder;
|
||||
else {
|
||||
for (UIView *subView in self.subviews) {
|
||||
UIView *fr = [subView findFirstResponder];
|
||||
if (fr != nil) {
|
||||
firstResponder = fr;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
|
||||
return firstResponder;
|
||||
}
|
||||
|
||||
- (UITableViewCell<XLFormDescriptorCell> *)formDescriptorCell
|
||||
- (nullable UITableViewCell<XLFormDescriptorCell> *)formDescriptorCell
|
||||
{
|
||||
UITableViewCell<XLFormDescriptorCell> * tableViewCell = nil;
|
||||
|
||||
if ([self isKindOfClass:[UITableViewCell class]]) {
|
||||
if ([self conformsToProtocol:@protocol(XLFormDescriptorCell)]){
|
||||
return (UITableViewCell<XLFormDescriptorCell> *)self;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
if (self.superview) {
|
||||
UITableViewCell<XLFormDescriptorCell> * tableViewCell = [self.superview formDescriptorCell];
|
||||
if (tableViewCell != nil) {
|
||||
return tableViewCell;
|
||||
tableViewCell = (UITableViewCell<XLFormDescriptorCell> *)self;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
else if (self.superview) {
|
||||
UITableViewCell<XLFormDescriptorCell> * cell = [self.superview formDescriptorCell];
|
||||
if (cell != nil) {
|
||||
tableViewCell = cell;
|
||||
}
|
||||
}
|
||||
|
||||
return tableViewCell;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -42,8 +42,8 @@
|
||||
|
||||
@protocol XLFormReturnKeyProtocol
|
||||
|
||||
@property UIReturnKeyType returnKeyType;
|
||||
@property UIReturnKeyType nextReturnKeyType;
|
||||
@property (nonatomic, assign) UIReturnKeyType returnKeyType;
|
||||
@property (nonatomic, assign) UIReturnKeyType nextReturnKeyType;
|
||||
|
||||
@end
|
||||
|
||||
Regular → Executable
+26
-1
@@ -50,7 +50,32 @@
|
||||
{
|
||||
self.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
|
||||
self.detailTextLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
|
||||
self.textLabel.textColor = self.rowDescriptor.isDisabled ? [UIColor grayColor] : [UIColor blackColor];
|
||||
|
||||
UIColor * textColor = nil;
|
||||
UIColor * disabledTextColor = nil;
|
||||
|
||||
if (@available(iOS 13.0, *)) {
|
||||
textColor = [UIColor labelColor];
|
||||
disabledTextColor = [UIColor systemGray3Color];
|
||||
}
|
||||
|
||||
else if (@available(iOS 12.0, *)) {
|
||||
textColor = [self traitCollection].userInterfaceStyle == UIUserInterfaceStyleDark ? [UIColor lightTextColor] : [UIColor darkTextColor];
|
||||
disabledTextColor = [UIColor systemGrayColor];
|
||||
}
|
||||
|
||||
else {
|
||||
textColor = [UIColor blackColor];
|
||||
disabledTextColor = [UIColor grayColor];
|
||||
}
|
||||
|
||||
|
||||
if (self.rowDescriptor.isDisabled) {
|
||||
self.textLabel.textColor = disabledTextColor;
|
||||
}
|
||||
else {
|
||||
self.textLabel.textColor = textColor;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)highlight
|
||||
Regular → Executable
+13
-3
@@ -26,14 +26,24 @@
|
||||
#import "XLFormRowDescriptor.h"
|
||||
#import "XLFormButtonCell.h"
|
||||
|
||||
@interface XLFormButtonCell ()
|
||||
|
||||
@property(nonatomic) BOOL useTintColor;
|
||||
|
||||
@end
|
||||
|
||||
@implementation XLFormButtonCell
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
|
||||
{
|
||||
return [super initWithStyle:style reuseIdentifier:reuseIdentifier];
|
||||
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
|
||||
|
||||
if (self) {
|
||||
_useTintColor = YES;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - XLFormDescriptorCell
|
||||
|
||||
-(void)configure
|
||||
@@ -52,7 +62,7 @@
|
||||
self.editingAccessoryType = self.accessoryType;
|
||||
self.selectionStyle = isDisabled ? UITableViewCellSelectionStyleNone : UITableViewCellSelectionStyleDefault;
|
||||
|
||||
if (simpleAction){
|
||||
if (simpleAction && _useTintColor){
|
||||
CGFloat red, green, blue, alpha;
|
||||
[self.tintColor getRed:&red green:&green blue:&blue alpha:&alpha];
|
||||
self.textLabel.textColor = [UIColor colorWithRed:red green:green blue:blue alpha:(isDisabled ? 0.3 : 1.0)];
|
||||
@@ -32,12 +32,20 @@ typedef NS_ENUM(NSUInteger, XLFormDateDatePickerMode) {
|
||||
XLFormDateDatePickerModeTime
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSUInteger, XLFormDateDatePickerStyle) {
|
||||
XLFormDateDatePickerStyleAutomatic,
|
||||
XLFormDateDatePickerStyleCompact,
|
||||
XLFormDateDatePickerStyleInline,
|
||||
XLFormDateDatePickerStyleWheels
|
||||
};
|
||||
|
||||
@interface XLFormDateCell : XLFormBaseCell
|
||||
|
||||
@property (nonatomic) XLFormDateDatePickerMode formDatePickerMode;
|
||||
@property (nonatomic) NSDate *minimumDate;
|
||||
@property (nonatomic) NSDate *maximumDate;
|
||||
@property (nonatomic) NSInteger minuteInterval;
|
||||
@property (nonatomic) NSLocale *locale;
|
||||
@property (nonatomic, assign) XLFormDateDatePickerMode formDatePickerMode;
|
||||
@property (nonatomic, assign) XLFormDateDatePickerStyle formDatePickerStyle;
|
||||
@property (nonatomic, copy ) NSDate *minimumDate;
|
||||
@property (nonatomic, copy ) NSDate *maximumDate;
|
||||
@property (nonatomic, assign) NSInteger minuteInterval;
|
||||
@property (nonatomic, copy ) NSLocale *locale;
|
||||
|
||||
@end
|
||||
@@ -48,6 +48,7 @@
|
||||
[self.datePicker setDate:self.rowDescriptor.value animated:[self.rowDescriptor.rowType isEqualToString:XLFormRowDescriptorTypeCountDownTimer]];
|
||||
}
|
||||
[self setModeToDatePicker:self.datePicker];
|
||||
[self setStyleToDatePicker:self.datePicker];
|
||||
return self.datePicker;
|
||||
}
|
||||
return [super inputView];
|
||||
@@ -74,6 +75,7 @@
|
||||
XLFormRowDescriptor * datePickerRowDescriptor = [XLFormRowDescriptor formRowDescriptorWithTag:nil rowType:XLFormRowDescriptorTypeDatePicker];
|
||||
XLFormDatePickerCell * datePickerCell = (XLFormDatePickerCell *)[datePickerRowDescriptor cellForFormController:self.formViewController];
|
||||
[self setModeToDatePicker:datePickerCell.datePicker];
|
||||
[self setStyleToDatePicker:datePickerCell.datePicker];
|
||||
if (self.rowDescriptor.value){
|
||||
[datePickerCell.datePicker setDate:self.rowDescriptor.value animated:[self.rowDescriptor.rowType isEqualToString:XLFormRowDescriptorTypeCountDownTimerInline]];
|
||||
}
|
||||
@@ -225,6 +227,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setStyleToDatePicker:(UIDatePicker *)datePicker
|
||||
{
|
||||
if (@available(iOS 14.0, *)) {
|
||||
switch (self.formDatePickerStyle) {
|
||||
case XLFormDateDatePickerStyleInline:
|
||||
datePicker.preferredDatePickerStyle = UIDatePickerStyleInline;
|
||||
break;
|
||||
case XLFormDateDatePickerStyleCompact:
|
||||
datePicker.preferredDatePickerStyle = UIDatePickerStyleCompact;
|
||||
break;
|
||||
case XLFormDateDatePickerStyleWheels:
|
||||
datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
|
||||
break;
|
||||
default:
|
||||
datePicker.preferredDatePickerStyle = UIDatePickerStyleAutomatic;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
-(UIDatePicker *)datePicker
|
||||
@@ -232,6 +254,7 @@
|
||||
if (_datePicker) return _datePicker;
|
||||
_datePicker = [[UIDatePicker alloc] init];
|
||||
[self setModeToDatePicker:_datePicker];
|
||||
[self setStyleToDatePicker:_datePicker];
|
||||
[_datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
|
||||
return _datePicker;
|
||||
}
|
||||
@@ -262,6 +285,7 @@
|
||||
if ([nextFormRow.rowType isEqualToString:XLFormRowDescriptorTypeDatePicker]){
|
||||
XLFormDatePickerCell * datePickerCell = (XLFormDatePickerCell *)[nextFormRow cellForFormController:self.formViewController];
|
||||
[self setModeToDatePicker:datePickerCell.datePicker];
|
||||
[self setStyleToDatePicker:datePickerCell.datePicker];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,16 +37,6 @@
|
||||
return YES;
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
-(UIDatePicker *)datePicker
|
||||
{
|
||||
if (_datePicker) return _datePicker;
|
||||
_datePicker = [UIDatePicker autolayoutView];
|
||||
[_datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
|
||||
return _datePicker;
|
||||
}
|
||||
|
||||
#pragma mark- Target Action
|
||||
|
||||
- (void)datePickerValueChanged:(UIDatePicker *)sender
|
||||
@@ -66,7 +56,12 @@
|
||||
-(void)configure
|
||||
{
|
||||
[super configure];
|
||||
[self.contentView addSubview:self.datePicker];
|
||||
|
||||
UIDatePicker *datePicker = [UIDatePicker autolayoutView];
|
||||
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
|
||||
[self.contentView addSubview:datePicker];
|
||||
_datePicker = datePicker;
|
||||
|
||||
[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.datePicker attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
|
||||
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[datePicker]-0-|" options:0 metrics:0 views:@{@"datePicker" : self.datePicker}]];
|
||||
}
|
||||
@@ -49,15 +49,15 @@ typedef NS_OPTIONS(NSUInteger, XLFormRowNavigationOptions) {
|
||||
|
||||
@interface XLFormDescriptor : NSObject
|
||||
|
||||
@property (readonly, nonatomic, nonnull) NSMutableArray * formSections;
|
||||
@property (readonly, nullable) NSString * title;
|
||||
@property (nonatomic) BOOL endEditingTableViewOnScroll;
|
||||
@property (nonatomic) BOOL assignFirstResponderOnShow;
|
||||
@property (nonatomic) BOOL addAsteriskToRequiredRowsTitle;
|
||||
@property (getter=isDisabled) BOOL disabled;
|
||||
@property (nonatomic) XLFormRowNavigationOptions rowNavigationOptions;
|
||||
@property (nonatomic, strong, readonly, nonnull) NSMutableArray * formSections;
|
||||
@property (nonatomic, readonly, nullable, copy) NSString * title;
|
||||
@property (nonatomic, assign) BOOL endEditingTableViewOnScroll;
|
||||
@property (nonatomic, assign) BOOL assignFirstResponderOnShow;
|
||||
@property (nonatomic, assign) BOOL addAsteriskToRequiredRowsTitle;
|
||||
@property (nonatomic, getter=isDisabled, assign) BOOL disabled;
|
||||
@property (nonatomic, assign) XLFormRowNavigationOptions rowNavigationOptions;
|
||||
|
||||
@property (weak, nullable) id<XLFormDescriptorDelegate> delegate;
|
||||
@property (nonatomic, weak, nullable) id<XLFormDescriptorDelegate> delegate;
|
||||
|
||||
+(nonnull instancetype)formDescriptor;
|
||||
+(nonnull instancetype)formDescriptorWithTitle:(nullable NSString *)title;
|
||||
@@ -32,10 +32,13 @@
|
||||
NSString * const XLFormErrorDomain = @"XLFormErrorDomain";
|
||||
NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
NSString * const XLFormSectionsKey = @"formSections";
|
||||
|
||||
|
||||
@interface XLFormSectionDescriptor (_XLFormDescriptor)
|
||||
|
||||
@property NSArray * allRows;
|
||||
@property (nonatomic, weak) NSArray *allRows;
|
||||
|
||||
-(BOOL)evaluateIsHidden;
|
||||
|
||||
@end
|
||||
@@ -51,11 +54,11 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
@interface XLFormDescriptor()
|
||||
|
||||
@property NSMutableArray * formSections;
|
||||
@property (readonly) NSMutableArray * allSections;
|
||||
@property NSString * title;
|
||||
@property (readonly) NSMutableDictionary* allRowsByTag;
|
||||
@property NSMutableDictionary* rowObservers;
|
||||
@property (nonatomic, strong) NSMutableArray *formSections;
|
||||
@property (nonatomic, strong, readonly) NSMutableArray *allSections;
|
||||
@property (nonatomic, copy ) NSString *title;
|
||||
@property (nonatomic, strong, readonly) NSMutableDictionary *allRowsByTag;
|
||||
@property (atomic , strong) NSMutableDictionary *rowObservers;
|
||||
|
||||
@end
|
||||
|
||||
@@ -63,15 +66,14 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(instancetype)init
|
||||
{
|
||||
return [self initWithTitle:nil];
|
||||
return [self initWithTitle:@""];
|
||||
}
|
||||
|
||||
-(instancetype)initWithTitle:(NSString *)title;
|
||||
{
|
||||
self = [super init];
|
||||
if (self){
|
||||
if (self = [super init]) {
|
||||
_formSections = [NSMutableArray array];
|
||||
_allSections = [NSMutableArray array];
|
||||
_allSections = [NSMutableArray array];
|
||||
_allRowsByTag = [NSMutableDictionary dictionary];
|
||||
_rowObservers = [NSMutableDictionary dictionary];
|
||||
_title = title;
|
||||
@@ -79,14 +81,19 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
_disabled = NO;
|
||||
_endEditingTableViewOnScroll = YES;
|
||||
_rowNavigationOptions = XLFormRowNavigationOptionEnabled;
|
||||
[self addObserver:self forKeyPath:@"formSections" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:0];
|
||||
|
||||
[self addObserver:self
|
||||
forKeyPath:XLFormSectionsKey
|
||||
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
|
||||
context:0];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
+(instancetype)formDescriptor
|
||||
{
|
||||
return [[self class] formDescriptorWithTitle:nil];
|
||||
return [[self class] formDescriptorWithTitle:@""];
|
||||
}
|
||||
|
||||
+(instancetype)formDescriptorWithTitle:(NSString *)title
|
||||
@@ -101,11 +108,11 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(void)addFormSection:(XLFormSectionDescriptor *)formSection atIndex:(NSUInteger)index
|
||||
{
|
||||
if (index == 0){
|
||||
if (index == 0) {
|
||||
[self insertObject:formSection inAllSectionsAtIndex:0];
|
||||
}
|
||||
else{
|
||||
XLFormSectionDescriptor* previousSection = [self.formSections objectAtIndex:MIN(self.formSections.count, index-1)];
|
||||
else {
|
||||
XLFormSectionDescriptor *previousSection = [self.formSections objectAtIndex:MIN(self.formSections.count, index-1)];
|
||||
[self addFormSection:formSection afterSection:previousSection];
|
||||
}
|
||||
}
|
||||
@@ -114,26 +121,28 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
{
|
||||
NSUInteger sectionIndex;
|
||||
NSUInteger allSectionIndex;
|
||||
if ((sectionIndex = [self.allSections indexOfObject:formSection]) == NSNotFound){
|
||||
if ((sectionIndex = [self.allSections indexOfObject:formSection]) == NSNotFound) {
|
||||
allSectionIndex = [self.allSections indexOfObject:afterSection];
|
||||
if (allSectionIndex != NSNotFound) {
|
||||
[self insertObject:formSection inAllSectionsAtIndex:(allSectionIndex + 1)];
|
||||
}
|
||||
else { //case when afterSection does not exist. Just insert at the end.
|
||||
[self addFormSection:formSection];
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
formSection.hidden = formSection.hidden;
|
||||
}
|
||||
|
||||
|
||||
-(void)addFormRow:(XLFormRowDescriptor *)formRow beforeRow:(XLFormRowDescriptor *)beforeRow
|
||||
{
|
||||
if (beforeRow.sectionDescriptor){
|
||||
if (beforeRow.sectionDescriptor) {
|
||||
[beforeRow.sectionDescriptor addFormRow:formRow beforeRow:beforeRow];
|
||||
}
|
||||
else{
|
||||
else {
|
||||
[[self.allSections lastObject] addFormRow:formRow beforeRow:beforeRow];
|
||||
}
|
||||
}
|
||||
@@ -144,27 +153,25 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
[self addFormRow:formRow beforeRow:beforeRowForm];
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(void)addFormRow:(XLFormRowDescriptor *)formRow afterRow:(XLFormRowDescriptor *)afterRow
|
||||
{
|
||||
if (afterRow.sectionDescriptor){
|
||||
if (afterRow.sectionDescriptor) {
|
||||
[afterRow.sectionDescriptor addFormRow:formRow afterRow:afterRow];
|
||||
}
|
||||
else{
|
||||
else {
|
||||
[[self.allSections lastObject] addFormRow:formRow afterRow:afterRow];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)addFormRow:(XLFormRowDescriptor *)formRow afterRowTag:(NSString *)afterRowTag
|
||||
{
|
||||
XLFormRowDescriptor * afterRowForm = [self formRowWithTag:afterRowTag];
|
||||
XLFormRowDescriptor *afterRowForm = [self formRowWithTag:afterRowTag];
|
||||
[self addFormRow:formRow afterRow:afterRowForm];
|
||||
}
|
||||
|
||||
-(void)removeFormSectionAtIndex:(NSUInteger)index
|
||||
{
|
||||
if (self.formSections.count > index){
|
||||
if (self.formSections.count > index) {
|
||||
XLFormSectionDescriptor *formSection = [self.formSections objectAtIndex:index];
|
||||
[self removeObjectFromFormSectionsAtIndex:index];
|
||||
NSUInteger allSectionIndex = [self.allSections indexOfObject:formSection];
|
||||
@@ -175,43 +182,47 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
-(void)removeFormSection:(XLFormSectionDescriptor *)formSection
|
||||
{
|
||||
NSUInteger index = NSNotFound;
|
||||
if ((index = [self.formSections indexOfObject:formSection]) != NSNotFound){
|
||||
if ((index = [self.formSections indexOfObject:formSection]) != NSNotFound) {
|
||||
[self removeFormSectionAtIndex:index];
|
||||
}
|
||||
else if ((index = [self.allSections indexOfObject:formSection]) != NSNotFound){
|
||||
if ((index = [self.allSections indexOfObject:formSection]) != NSNotFound) {
|
||||
[self removeObjectFromAllSectionsAtIndex:index];
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
-(void)removeFormRow:(XLFormRowDescriptor *)formRow
|
||||
{
|
||||
for (XLFormSectionDescriptor * section in self.formSections){
|
||||
if ([section.formRows containsObject:formRow]){
|
||||
for (XLFormSectionDescriptor *section in self.formSections) {
|
||||
if ([section.formRows containsObject:formRow]) {
|
||||
[section removeFormRow:formRow];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(void)showFormSection:(XLFormSectionDescriptor*)formSection
|
||||
-(void)showFormSection:(XLFormSectionDescriptor *)formSection
|
||||
{
|
||||
NSUInteger formIndex = [self.formSections indexOfObject:formSection];
|
||||
if (formIndex != NSNotFound) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSUInteger index = [self.allSections indexOfObject:formSection];
|
||||
if (index != NSNotFound){
|
||||
if (index != NSNotFound) {
|
||||
while (formIndex == NSNotFound && index > 0) {
|
||||
XLFormSectionDescriptor* previous = [self.allSections objectAtIndex:--index];
|
||||
formIndex = [self.formSections indexOfObject:previous];
|
||||
}
|
||||
|
||||
[self insertObject:formSection inFormSectionsAtIndex:(formIndex == NSNotFound ? 0 : ++formIndex)];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)hideFormSection:(XLFormSectionDescriptor*)formSection
|
||||
-(void)hideFormSection:(XLFormSectionDescriptor *)formSection
|
||||
{
|
||||
NSUInteger index = [self.formSections indexOfObject:formSection];
|
||||
if (index != NSNotFound){
|
||||
if (index != NSNotFound) {
|
||||
[self removeObjectFromFormSectionsAtIndex:index];
|
||||
}
|
||||
}
|
||||
@@ -224,28 +235,29 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(XLFormRowDescriptor *)formRowWithHash:(NSUInteger)hash
|
||||
{
|
||||
for (XLFormSectionDescriptor * section in self.allSections){
|
||||
for (XLFormRowDescriptor * row in section.allRows) {
|
||||
if ([row hash] == hash){
|
||||
for (XLFormSectionDescriptor *section in self.allSections) {
|
||||
for (XLFormRowDescriptor *row in section.allRows) {
|
||||
if ([row hash] == hash) {
|
||||
return row;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
-(void)removeFormRowWithTag:(NSString *)tag
|
||||
{
|
||||
XLFormRowDescriptor * formRow = [self formRowWithTag:tag];
|
||||
XLFormRowDescriptor *formRow = [self formRowWithTag:tag];
|
||||
[self removeFormRow:formRow];
|
||||
}
|
||||
|
||||
-(XLFormRowDescriptor *)formRowAtIndex:(NSIndexPath *)indexPath
|
||||
{
|
||||
if ((self.formSections.count > indexPath.section) && [[self.formSections objectAtIndex:indexPath.section] formRows].count > indexPath.row){
|
||||
if ((self.formSections.count > indexPath.section) && [[self.formSections objectAtIndex:indexPath.section] formRows].count > indexPath.row) {
|
||||
return [[[self.formSections objectAtIndex:indexPath.section] formRows] objectAtIndex:indexPath.row];
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
@@ -256,55 +268,62 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(NSIndexPath *)indexPathOfFormRow:(XLFormRowDescriptor *)formRow
|
||||
{
|
||||
XLFormSectionDescriptor * section = formRow.sectionDescriptor;
|
||||
if (section){
|
||||
NSIndexPath *result = nil;
|
||||
XLFormSectionDescriptor *section = formRow.sectionDescriptor;
|
||||
if (section) {
|
||||
NSUInteger sectionIndex = [self.formSections indexOfObject:section];
|
||||
if (sectionIndex != NSNotFound){
|
||||
if (sectionIndex != NSNotFound) {
|
||||
NSUInteger rowIndex = [section.formRows indexOfObject:formRow];
|
||||
if (rowIndex != NSNotFound){
|
||||
return [NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex];
|
||||
if (rowIndex != NSNotFound) {
|
||||
result = [NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
-(NSIndexPath *)globalIndexPathOfFormRow:(XLFormRowDescriptor *)formRow
|
||||
{
|
||||
XLFormSectionDescriptor * section = formRow.sectionDescriptor;
|
||||
if (section){
|
||||
NSIndexPath *result = nil;
|
||||
XLFormSectionDescriptor *section = formRow.sectionDescriptor;
|
||||
if (section) {
|
||||
NSUInteger sectionIndex = [self.allSections indexOfObject:section];
|
||||
if (sectionIndex != NSNotFound){
|
||||
if (sectionIndex != NSNotFound) {
|
||||
NSUInteger rowIndex = [section.allRows indexOfObject:formRow];
|
||||
if (rowIndex != NSNotFound){
|
||||
return [NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex];
|
||||
if (rowIndex != NSNotFound) {
|
||||
result = [NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
-(NSDictionary *)formValues
|
||||
{
|
||||
NSMutableDictionary * result = [NSMutableDictionary dictionary];
|
||||
for (XLFormSectionDescriptor * section in self.formSections) {
|
||||
if (section.multivaluedTag.length > 0){
|
||||
NSMutableArray * multiValuedValuesArray = [NSMutableArray new];
|
||||
for (XLFormRowDescriptor * row in section.formRows) {
|
||||
if (row.value){
|
||||
NSMutableDictionary *result = [NSMutableDictionary dictionary];
|
||||
for (XLFormSectionDescriptor *section in self.formSections) {
|
||||
if (section.multivaluedTag.length > 0) {
|
||||
NSMutableArray *multiValuedValuesArray = [NSMutableArray new];
|
||||
for (XLFormRowDescriptor *row in section.formRows) {
|
||||
if (row.value && row.value != [NSNull null]) {
|
||||
[multiValuedValuesArray addObject:row.value];
|
||||
}
|
||||
}
|
||||
|
||||
[result setObject:multiValuedValuesArray forKey:section.multivaluedTag];
|
||||
}
|
||||
else{
|
||||
for (XLFormRowDescriptor * row in section.formRows) {
|
||||
if (row.tag.length > 0){
|
||||
[result setObject:(row.value ?: [NSNull null]) forKey:row.tag];
|
||||
else {
|
||||
for (XLFormRowDescriptor *row in section.formRows) {
|
||||
id value = [row.value valueData];
|
||||
if (row.tag.length > 0 && value != nil) {
|
||||
[result setObject:value forKey:row.tag];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -312,49 +331,55 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
{
|
||||
NSMutableDictionary * result = [NSMutableDictionary dictionary];
|
||||
for (XLFormSectionDescriptor * section in self.formSections) {
|
||||
if (section.multivaluedTag.length > 0){
|
||||
NSMutableArray * multiValuedValuesArray = [NSMutableArray new];
|
||||
if (section.multivaluedTag.length > 0) {
|
||||
NSMutableArray *multiValuedValuesArray = [NSMutableArray new];
|
||||
for (XLFormRowDescriptor * row in section.formRows) {
|
||||
if ([row.value valueData]){
|
||||
if ([row.value valueData]) {
|
||||
[multiValuedValuesArray addObject:[row.value valueData]];
|
||||
}
|
||||
}
|
||||
|
||||
[result setObject:multiValuedValuesArray forKey:section.multivaluedTag];
|
||||
}
|
||||
else{
|
||||
else {
|
||||
for (XLFormRowDescriptor * row in section.formRows) {
|
||||
NSString * httpParameterKey = nil;
|
||||
if ((httpParameterKey = [self httpParameterKeyForRow:row cell:[row cellForFormController:formViewController]])){
|
||||
NSString *httpParameterKey = nil;
|
||||
if ((httpParameterKey = [self httpParameterKeyForRow:row cell:[row cellForFormController:formViewController]])) {
|
||||
id parameterValue = [row.value valueData] ?: [NSNull null];
|
||||
[result setObject:parameterValue forKey:httpParameterKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
-(NSString *)httpParameterKeyForRow:(XLFormRowDescriptor *)row cell:(UITableViewCell<XLFormDescriptorCell> *)descriptorCell
|
||||
{
|
||||
if ([descriptorCell respondsToSelector:@selector(formDescriptorHttpParameterName)]){
|
||||
return [descriptorCell formDescriptorHttpParameterName];
|
||||
NSString *result = nil;
|
||||
|
||||
if ([descriptorCell respondsToSelector:@selector(formDescriptorHttpParameterName)]) {
|
||||
result = [descriptorCell formDescriptorHttpParameterName];
|
||||
}
|
||||
if (row.tag.length > 0){
|
||||
return row.tag;
|
||||
else if (row.tag.length > 0) {
|
||||
result = row.tag;
|
||||
}
|
||||
return nil;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
-(NSArray *)localValidationErrors:(XLFormViewController *)formViewController {
|
||||
NSMutableArray * result = [NSMutableArray array];
|
||||
for (XLFormSectionDescriptor * section in self.formSections) {
|
||||
for (XLFormRowDescriptor * row in section.formRows) {
|
||||
XLFormValidationStatus* status = [row doValidation];
|
||||
-(NSArray *)localValidationErrors:(XLFormViewController *)formViewController
|
||||
{
|
||||
NSMutableArray *result = [NSMutableArray array];
|
||||
for (XLFormSectionDescriptor *section in self.formSections) {
|
||||
for (XLFormRowDescriptor *row in section.formRows) {
|
||||
XLFormValidationStatus *status = [row doValidation];
|
||||
if (status != nil && (![status isValid])) {
|
||||
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: status.msg,
|
||||
XLValidationStatusErrorKey: status };
|
||||
NSError * error = [[NSError alloc] initWithDomain:XLFormErrorDomain code:XLFormErrorCodeGen userInfo:userInfo];
|
||||
if (error){
|
||||
NSError *error = [[NSError alloc] initWithDomain:XLFormErrorDomain code:XLFormErrorCodeGen userInfo:userInfo];
|
||||
if (error) {
|
||||
[result addObject:error];
|
||||
}
|
||||
}
|
||||
@@ -367,11 +392,11 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
- (void)setFirstResponder:(XLFormViewController *)formViewController
|
||||
{
|
||||
for (XLFormSectionDescriptor * formSection in self.formSections) {
|
||||
for (XLFormRowDescriptor * row in formSection.formRows) {
|
||||
UITableViewCell<XLFormDescriptorCell> * cell = [row cellForFormController:formViewController];
|
||||
if ([cell formDescriptorCellCanBecomeFirstResponder]){
|
||||
if ([cell formDescriptorCellBecomeFirstResponder]){
|
||||
for (XLFormSectionDescriptor *formSection in self.formSections) {
|
||||
for (XLFormRowDescriptor *row in formSection.formRows) {
|
||||
UITableViewCell<XLFormDescriptorCell> *cell = [row cellForFormController:formViewController];
|
||||
if ([cell formDescriptorCellCanBecomeFirstResponder]) {
|
||||
if ([cell formDescriptorCellBecomeFirstResponder]) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -382,18 +407,23 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
#pragma mark - KVO
|
||||
|
||||
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||
- (void)observeValueForKeyPath:(nullable NSString *)keyPath
|
||||
ofObject:(nullable id)object
|
||||
change:(nullable NSDictionary<NSKeyValueChangeKey, id> *)change
|
||||
context:(nullable void *)context
|
||||
{
|
||||
if (!self.delegate) return;
|
||||
if ([keyPath isEqualToString:@"formSections"]){
|
||||
if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeInsertion)]){
|
||||
NSIndexSet * indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormSectionDescriptor * section = [self.formSections objectAtIndex:indexSet.firstIndex];
|
||||
if (!self.delegate) {
|
||||
return;
|
||||
}
|
||||
else if ([keyPath isEqualToString:XLFormSectionsKey]) {
|
||||
if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeInsertion)]) {
|
||||
NSIndexSet *indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormSectionDescriptor *section = [self.formSections objectAtIndex:indexSet.firstIndex];
|
||||
[self.delegate formSectionHasBeenAdded:section atIndex:indexSet.firstIndex];
|
||||
}
|
||||
else if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeRemoval)]){
|
||||
NSIndexSet * indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormSectionDescriptor * removedSection = [[change objectForKey:NSKeyValueChangeOldKey] objectAtIndex:0];
|
||||
else if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeRemoval)]) {
|
||||
NSIndexSet *indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormSectionDescriptor *removedSection = [[change objectForKey:NSKeyValueChangeOldKey] objectAtIndex:0];
|
||||
[self.delegate formSectionHasBeenRemoved:removedSection atIndex:indexSet.firstIndex];
|
||||
}
|
||||
}
|
||||
@@ -401,10 +431,16 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
@try {
|
||||
[self removeObserver:self forKeyPath:@"formSections"];
|
||||
}
|
||||
@catch (NSException * __unused exception) {}
|
||||
[self removeObserver:self forKeyPath:XLFormSectionsKey];
|
||||
|
||||
[_formSections removeAllObjects];
|
||||
_formSections = nil;
|
||||
[_allSections removeAllObjects];
|
||||
_allSections = nil;
|
||||
[_allRowsByTag removeAllObjects];
|
||||
_allRowsByTag = nil;
|
||||
[_rowObservers removeAllObjects];
|
||||
_rowObservers = nil;
|
||||
}
|
||||
|
||||
#pragma mark - KVC
|
||||
@@ -414,19 +450,23 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
return self.formSections.count;
|
||||
}
|
||||
|
||||
- (id)objectInFormSectionsAtIndex:(NSUInteger)index {
|
||||
- (id)objectInFormSectionsAtIndex:(NSUInteger)index
|
||||
{
|
||||
return [self.formSections objectAtIndex:index];
|
||||
}
|
||||
|
||||
- (NSArray *)formSectionsAtIndexes:(NSIndexSet *)indexes {
|
||||
- (NSArray *)formSectionsAtIndexes:(NSIndexSet *)indexes
|
||||
{
|
||||
return [self.formSections objectsAtIndexes:indexes];
|
||||
}
|
||||
|
||||
- (void)insertObject:(XLFormSectionDescriptor *)formSection inFormSectionsAtIndex:(NSUInteger)index {
|
||||
- (void)insertObject:(XLFormSectionDescriptor *)formSection inFormSectionsAtIndex:(NSUInteger)index
|
||||
{
|
||||
[self.formSections insertObject:formSection atIndex:index];
|
||||
}
|
||||
|
||||
- (void)removeObjectFromFormSectionsAtIndex:(NSUInteger)index {
|
||||
- (void)removeObjectFromFormSectionsAtIndex:(NSUInteger)index
|
||||
{
|
||||
[self.formSections removeObjectAtIndex:index];
|
||||
}
|
||||
|
||||
@@ -445,7 +485,8 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
return [self.allSections objectsAtIndexes:indexes];
|
||||
}
|
||||
|
||||
- (void)removeObjectFromAllSectionsAtIndex:(NSUInteger)index {
|
||||
- (void)removeObjectFromAllSectionsAtIndex:(NSUInteger)index
|
||||
{
|
||||
XLFormSectionDescriptor* section = [self.allSections objectAtIndex:index];
|
||||
[section.allRows enumerateObjectsUsingBlock:^(id obj, NSUInteger __unused idx, BOOL *stop) {
|
||||
XLFormRowDescriptor * row = (id)obj;
|
||||
@@ -456,7 +497,8 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
[self.allSections removeObjectAtIndex:index];
|
||||
}
|
||||
|
||||
- (void)insertObject:(XLFormSectionDescriptor *)section inAllSectionsAtIndex:(NSUInteger)index {
|
||||
- (void)insertObject:(XLFormSectionDescriptor *)section inAllSectionsAtIndex:(NSUInteger)index
|
||||
{
|
||||
section.formDescriptor = self;
|
||||
[self.allSections insertObject:section atIndex:index];
|
||||
section.hidden = section.hidden;
|
||||
@@ -466,24 +508,23 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
row.hidden = row.hidden;
|
||||
row.disabled = row.disabled;
|
||||
}];
|
||||
|
||||
|
||||
}
|
||||
|
||||
#pragma mark - EvaluateForm
|
||||
|
||||
-(void)forceEvaluate
|
||||
{
|
||||
for (XLFormSectionDescriptor* section in self.allSections){
|
||||
for (XLFormRowDescriptor* row in section.allRows) {
|
||||
for (XLFormSectionDescriptor *section in self.allSections) {
|
||||
for (XLFormRowDescriptor *row in section.allRows) {
|
||||
[self addRowToTagCollection:row];
|
||||
}
|
||||
}
|
||||
for (XLFormSectionDescriptor* section in self.allSections){
|
||||
for (XLFormRowDescriptor* row in section.allRows) {
|
||||
for (XLFormSectionDescriptor *section in self.allSections) {
|
||||
for (XLFormRowDescriptor *row in section.allRows) {
|
||||
[row evaluateIsDisabled];
|
||||
[row evaluateIsHidden];
|
||||
}
|
||||
|
||||
[section evaluateIsHidden];
|
||||
}
|
||||
}
|
||||
@@ -500,60 +541,65 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(XLFormRowDescriptor *)nextRowDescriptorForRow:(XLFormRowDescriptor *)row
|
||||
{
|
||||
XLFormRowDescriptor *result = nil;
|
||||
NSUInteger indexOfRow = [row.sectionDescriptor.formRows indexOfObject:row];
|
||||
if (indexOfRow != NSNotFound){
|
||||
if (indexOfRow + 1 < row.sectionDescriptor.formRows.count){
|
||||
return [row.sectionDescriptor.formRows objectAtIndex:++indexOfRow];
|
||||
if (indexOfRow != NSNotFound) {
|
||||
if (indexOfRow + 1 < row.sectionDescriptor.formRows.count) {
|
||||
result = [row.sectionDescriptor.formRows objectAtIndex:++indexOfRow];
|
||||
}
|
||||
else{
|
||||
else {
|
||||
NSUInteger sectionIndex = [self.formSections indexOfObject:row.sectionDescriptor];
|
||||
NSUInteger numberOfSections = [self.formSections count];
|
||||
if (sectionIndex != NSNotFound && sectionIndex < numberOfSections - 1){
|
||||
if (sectionIndex != NSNotFound && sectionIndex < numberOfSections - 1) {
|
||||
sectionIndex++;
|
||||
XLFormSectionDescriptor * sectionDescriptor;
|
||||
while ([[(sectionDescriptor = [row.sectionDescriptor.formDescriptor.formSections objectAtIndex:sectionIndex]) formRows] count] == 0 && sectionIndex < numberOfSections - 1){
|
||||
XLFormSectionDescriptor *sectionDescriptor;
|
||||
while ([[(sectionDescriptor = [row.sectionDescriptor.formDescriptor.formSections objectAtIndex:sectionIndex]) formRows] count] == 0 && sectionIndex < numberOfSections - 1) {
|
||||
sectionIndex++;
|
||||
}
|
||||
return [sectionDescriptor.formRows firstObject];
|
||||
|
||||
result = [sectionDescriptor.formRows firstObject];
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
-(XLFormRowDescriptor *)previousRowDescriptorForRow:(XLFormRowDescriptor *)row
|
||||
{
|
||||
XLFormRowDescriptor *result = nil;
|
||||
NSUInteger indexOfRow = [row.sectionDescriptor.formRows indexOfObject:row];
|
||||
if (indexOfRow != NSNotFound){
|
||||
if (indexOfRow > 0 ){
|
||||
return [row.sectionDescriptor.formRows objectAtIndex:--indexOfRow];
|
||||
if (indexOfRow != NSNotFound) {
|
||||
if (indexOfRow > 0 ) {
|
||||
result = [row.sectionDescriptor.formRows objectAtIndex:--indexOfRow];
|
||||
}
|
||||
else{
|
||||
else {
|
||||
NSUInteger sectionIndex = [self.formSections indexOfObject:row.sectionDescriptor];
|
||||
if (sectionIndex != NSNotFound && sectionIndex > 0){
|
||||
if (sectionIndex != NSNotFound && sectionIndex > 0) {
|
||||
sectionIndex--;
|
||||
XLFormSectionDescriptor * sectionDescriptor;
|
||||
while ([[(sectionDescriptor = [row.sectionDescriptor.formDescriptor.formSections objectAtIndex:sectionIndex]) formRows] count] == 0 && sectionIndex > 0 ){
|
||||
while ([[(sectionDescriptor = [row.sectionDescriptor.formDescriptor.formSections objectAtIndex:sectionIndex]) formRows] count] == 0 && sectionIndex > 0 ) {
|
||||
sectionIndex--;
|
||||
}
|
||||
return [sectionDescriptor.formRows lastObject];
|
||||
result = [sectionDescriptor.formRows lastObject];
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
-(void)addRowToTagCollection:(XLFormRowDescriptor*) rowDescriptor
|
||||
-(void)addRowToTagCollection:(XLFormRowDescriptor *)rowDescriptor
|
||||
{
|
||||
if (rowDescriptor.tag) {
|
||||
if (rowDescriptor.tag.length) {
|
||||
self.allRowsByTag[rowDescriptor.tag] = rowDescriptor;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)removeRowFromTagCollection:(XLFormRowDescriptor *)rowDescriptor
|
||||
{
|
||||
if (rowDescriptor.tag){
|
||||
if (rowDescriptor.tag.length) {
|
||||
[self.allRowsByTag removeObjectForKey:rowDescriptor.tag];
|
||||
}
|
||||
}
|
||||
@@ -561,32 +607,36 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(void)addObserversOfObject:(id)sectionOrRow predicateType:(XLPredicateType)predicateType
|
||||
{
|
||||
NSPredicate* predicate;
|
||||
NSPredicate *predicate;
|
||||
id descriptor;
|
||||
switch(predicateType){
|
||||
|
||||
switch (predicateType) {
|
||||
case XLPredicateTypeHidden:
|
||||
if ([sectionOrRow isKindOfClass:([XLFormRowDescriptor class])]) {
|
||||
descriptor = ((XLFormRowDescriptor*)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor*)sectionOrRow).hidden;
|
||||
descriptor = ((XLFormRowDescriptor *)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor *)sectionOrRow).hidden;
|
||||
}
|
||||
else if ([sectionOrRow isKindOfClass:([XLFormSectionDescriptor class])]) {
|
||||
descriptor = sectionOrRow;
|
||||
predicate = ((XLFormSectionDescriptor*)sectionOrRow).hidden;
|
||||
predicate = ((XLFormSectionDescriptor *)sectionOrRow).hidden;
|
||||
}
|
||||
break;
|
||||
case XLPredicateTypeDisabled:
|
||||
if ([sectionOrRow isKindOfClass:([XLFormRowDescriptor class])]) {
|
||||
descriptor = ((XLFormRowDescriptor*)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor*)sectionOrRow).disabled;
|
||||
descriptor = ((XLFormRowDescriptor *)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor *)sectionOrRow).disabled;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
else return;
|
||||
|
||||
break;
|
||||
}
|
||||
NSMutableArray* tags = [predicate getPredicateVars];
|
||||
for (NSString* tag in tags) {
|
||||
NSString* auxTag = [tag formKeyForPredicateType:predicateType];
|
||||
if (!self.rowObservers[auxTag]){
|
||||
|
||||
NSMutableArray *tags = [predicate getPredicateVars];
|
||||
for (NSString *tag in tags) {
|
||||
NSString *auxTag = [tag formKeyForPredicateType:predicateType];
|
||||
if (!self.rowObservers[auxTag]) {
|
||||
self.rowObservers[auxTag] = [NSMutableArray array];
|
||||
}
|
||||
if (![self.rowObservers[auxTag] containsObject:descriptor])
|
||||
@@ -597,31 +647,32 @@ NSString * const XLValidationStatusErrorKey = @"XLValidationStatusErrorKey";
|
||||
|
||||
-(void)removeObserversOfObject:(id)sectionOrRow predicateType:(XLPredicateType)predicateType
|
||||
{
|
||||
NSPredicate* predicate;
|
||||
NSPredicate *predicate;
|
||||
id descriptor;
|
||||
switch(predicateType){
|
||||
|
||||
switch(predicateType) {
|
||||
case XLPredicateTypeHidden:
|
||||
if ([sectionOrRow isKindOfClass:([XLFormRowDescriptor class])]) {
|
||||
descriptor = ((XLFormRowDescriptor*)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor*)sectionOrRow).hidden;
|
||||
descriptor = ((XLFormRowDescriptor *)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor *)sectionOrRow).hidden;
|
||||
}
|
||||
else if ([sectionOrRow isKindOfClass:([XLFormSectionDescriptor class])]) {
|
||||
descriptor = sectionOrRow;
|
||||
predicate = ((XLFormSectionDescriptor*)sectionOrRow).hidden;
|
||||
predicate = ((XLFormSectionDescriptor *)sectionOrRow).hidden;
|
||||
}
|
||||
break;
|
||||
case XLPredicateTypeDisabled:
|
||||
if ([sectionOrRow isKindOfClass:([XLFormRowDescriptor class])]) {
|
||||
descriptor = ((XLFormRowDescriptor*)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor*)sectionOrRow).disabled;
|
||||
descriptor = ((XLFormRowDescriptor *)sectionOrRow).tag;
|
||||
predicate = ((XLFormRowDescriptor *)sectionOrRow).disabled;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (descriptor && [predicate isKindOfClass:[NSPredicate class] ]) {
|
||||
NSMutableArray* tags = [predicate getPredicateVars];
|
||||
for (NSString* tag in tags) {
|
||||
NSString* auxTag = [tag formKeyForPredicateType:predicateType];
|
||||
if (self.rowObservers[auxTag]){
|
||||
if (descriptor && [predicate isKindOfClass:[NSPredicate class]]) {
|
||||
NSMutableArray *tags = [predicate getPredicateVars];
|
||||
for (NSString *tag in tags) {
|
||||
NSString *auxTag = [tag formKeyForPredicateType:predicateType];
|
||||
if (self.rowObservers[auxTag]) {
|
||||
[self.rowObservers[auxTag] removeObject:descriptor];
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,7 @@
|
||||
|
||||
- (void)formDescriptorCellDidSelectedWithFormController:(XLFormViewController *)controller
|
||||
{
|
||||
__weak typeof(self) weak = self;
|
||||
alertController = [UIAlertController alertControllerWithTitle: self.rowDescriptor.title
|
||||
message: nil
|
||||
preferredStyle: UIAlertControllerStyleActionSheet];
|
||||
@@ -78,14 +79,14 @@
|
||||
[alertController addAction:[UIAlertAction actionWithTitle: NSLocalizedString(@"Choose From Library", nil)
|
||||
style: UIAlertActionStyleDefault
|
||||
handler: ^(UIAlertAction * _Nonnull action) {
|
||||
[self openImage:UIImagePickerControllerSourceTypePhotoLibrary];
|
||||
[weak openImage:UIImagePickerControllerSourceTypePhotoLibrary];
|
||||
}]];
|
||||
|
||||
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
|
||||
[alertController addAction:[UIAlertAction actionWithTitle: NSLocalizedString(@"Take Photo", nil)
|
||||
style: UIAlertActionStyleDefault
|
||||
handler: ^(UIAlertAction * _Nonnull action) {
|
||||
[self openImage:UIImagePickerControllerSourceTypeCamera];
|
||||
[weak openImage:UIImagePickerControllerSourceTypeCamera];
|
||||
}]];
|
||||
}
|
||||
|
||||
@@ -100,7 +101,7 @@
|
||||
}
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self.formViewController presentViewController:alertController animated: true completion: nil];
|
||||
[weak.formViewController presentViewController:self->alertController animated: true completion: nil];
|
||||
});
|
||||
}
|
||||
|
||||
+4
-4
@@ -196,14 +196,14 @@
|
||||
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", nil)
|
||||
style:UIAlertActionStyleCancel
|
||||
handler:nil]];
|
||||
__weak __typeof(self)weakSelf = self;
|
||||
__weak typeof(self) weak = self;
|
||||
for (XLFormLeftRightSelectorOption * leftOption in self.rowDescriptor.selectorOptions) {
|
||||
[alertController addAction:[UIAlertAction actionWithTitle:[leftOption.leftValue displayText]
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction *action) {
|
||||
weakSelf.rowDescriptor.value = [self chooseNewRightValueFromOption:leftOption];
|
||||
weakSelf.rowDescriptor.leftRightSelectorLeftOptionSelected = [self leftOptionForDescription:[leftOption.leftValue displayText]].leftValue;
|
||||
[weakSelf.formViewController updateFormRow:weakSelf.rowDescriptor];
|
||||
weak.rowDescriptor.value = [weak chooseNewRightValueFromOption:leftOption];
|
||||
weak.rowDescriptor.leftRightSelectorLeftOptionSelected = [weak leftOptionForDescription:[leftOption.leftValue displayText]].leftValue;
|
||||
[weak.formViewController updateFormRow:weak.rowDescriptor];
|
||||
}]];
|
||||
}
|
||||
|
||||
@@ -28,8 +28,8 @@
|
||||
|
||||
@interface XLFormOptionsObject : NSObject <XLFormOptionObject,NSCoding>
|
||||
|
||||
@property (nonatomic) NSString * formDisplaytext;
|
||||
@property (nonatomic) id formValue;
|
||||
@property (nonatomic, copy) NSString * formDisplaytext;
|
||||
@property (nonatomic, strong) id formValue;
|
||||
|
||||
+(XLFormOptionsObject *)formOptionsObjectWithValue:(id)value displayText:(NSString *)displayText;
|
||||
+(XLFormOptionsObject *)formOptionsOptionForValue:(id)value fromOptions:(NSArray *)options;
|
||||
@@ -107,4 +107,9 @@
|
||||
|
||||
}
|
||||
|
||||
-(NSUInteger)hash
|
||||
{
|
||||
return [[self formValue ] hash];
|
||||
}
|
||||
|
||||
@end
|
||||
+2
-2
@@ -34,8 +34,8 @@
|
||||
|
||||
@interface XLFormOptionsViewController () <UITableViewDataSource>
|
||||
|
||||
@property NSString * titleHeaderSection;
|
||||
@property NSString * titleFooterSection;
|
||||
@property (nonatomic, copy) NSString * titleHeaderSection;
|
||||
@property (nonatomic, copy) NSString * titleFooterSection;
|
||||
|
||||
|
||||
@end
|
||||
@@ -28,6 +28,6 @@
|
||||
|
||||
@interface XLFormPickerCell : XLFormBaseCell<XLFormInlineRowDescriptorCell>
|
||||
|
||||
@property (nonatomic) UIPickerView * pickerView;
|
||||
@property (nonatomic, weak) UIPickerView * pickerView;
|
||||
|
||||
@end
|
||||
@@ -56,23 +56,19 @@
|
||||
return [self formDescriptorCellCanBecomeFirstResponder];
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
-(UIPickerView *)pickerView
|
||||
{
|
||||
if (_pickerView) return _pickerView;
|
||||
_pickerView = [UIPickerView autolayoutView];
|
||||
_pickerView.delegate = self;
|
||||
_pickerView.dataSource = self;
|
||||
return _pickerView;
|
||||
}
|
||||
|
||||
#pragma mark - XLFormDescriptorCell
|
||||
|
||||
-(void)configure
|
||||
{
|
||||
[super configure];
|
||||
[self.contentView addSubview:self.pickerView];
|
||||
|
||||
UIPickerView *pickerView = [UIPickerView autolayoutView];
|
||||
pickerView.delegate = self;
|
||||
pickerView.dataSource = self;
|
||||
|
||||
[self.contentView addSubview:pickerView];
|
||||
_pickerView = pickerView;
|
||||
|
||||
[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.pickerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
|
||||
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[pickerView]-0-|" options:0 metrics:0 views:@{@"pickerView" : self.pickerView}]];
|
||||
}
|
||||
@@ -29,8 +29,8 @@
|
||||
|
||||
@interface XLFormRegexValidator : XLFormValidator
|
||||
|
||||
@property NSString *msg;
|
||||
@property NSString *regex;
|
||||
@property (nonatomic, copy) NSString *msg;
|
||||
@property (nonatomic, copy) NSString *regex;
|
||||
|
||||
- (instancetype)initWithMsg:(NSString*)msg andRegexString:(NSString*)regex;
|
||||
+ (XLFormRegexValidator *)formRegexValidatorWithMsg:(NSString *)msg regex:(NSString *)regex;
|
||||
@@ -43,22 +43,22 @@ typedef NS_ENUM(NSUInteger, XLFormPresentationMode) {
|
||||
XLFormPresentationModePresent
|
||||
};
|
||||
|
||||
typedef void(^XLOnChangeBlock)(id __nullable oldValue,id __nullable newValue,XLFormRowDescriptor* __nonnull rowDescriptor);
|
||||
typedef void(^XLOnChangeBlock)(id __nullable oldValue, id __nullable newValue, XLFormRowDescriptor * __nonnull rowDescriptor);
|
||||
|
||||
@interface XLFormRowDescriptor : NSObject
|
||||
|
||||
@property (nullable) id cellClass;
|
||||
@property (readwrite, nullable) NSString * tag;
|
||||
@property (readonly, nonnull) NSString * rowType;
|
||||
@property (nullable) NSString * title;
|
||||
@property (nonatomic, nullable) id value;
|
||||
@property (nullable) Class valueTransformer;
|
||||
@property UITableViewCellStyle cellStyle;
|
||||
@property (nonatomic) CGFloat height;
|
||||
@property (nonatomic, nullable, strong) id cellClass;
|
||||
@property (nonatomic, nullable, copy , readwrite) NSString * tag;
|
||||
@property (nonatomic, nonnull , copy , readonly) NSString * rowType;
|
||||
@property (nonatomic, nullable, copy ) NSString * title;
|
||||
@property (nonatomic, nullable, strong) id value;
|
||||
@property (nonatomic, nullable, strong) Class valueTransformer;
|
||||
@property (nonatomic, assign ) UITableViewCellStyle cellStyle;
|
||||
@property (nonatomic, assign ) CGFloat height;
|
||||
|
||||
@property (copy, nullable) XLOnChangeBlock onChangeBlock;
|
||||
@property BOOL useValueFormatterDuringInput;
|
||||
@property (nullable) NSFormatter *valueFormatter;
|
||||
@property (nonatomic, copy , nullable) XLOnChangeBlock onChangeBlock;
|
||||
@property (nonatomic, assign) BOOL useValueFormatterDuringInput;
|
||||
@property (nonatomic, strong, nullable) NSFormatter *valueFormatter;
|
||||
|
||||
// returns the display text for the row descriptor, taking into account NSFormatters and default placeholder values
|
||||
- (nonnull NSString *) displayTextValue;
|
||||
@@ -66,20 +66,22 @@ typedef void(^XLOnChangeBlock)(id __nullable oldValue,id __nullable newValue,XLF
|
||||
// returns the editing text value for the row descriptor, taking into account NSFormatters.
|
||||
- (nonnull NSString *) editTextValue;
|
||||
|
||||
@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfig;
|
||||
@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfigForSelector;
|
||||
@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfigIfDisabled;
|
||||
@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfigAtConfigure;
|
||||
@property (nonatomic, readonly, nonnull, strong) NSMutableDictionary * cellConfig;
|
||||
@property (nonatomic, readonly, nonnull, strong) NSMutableDictionary * cellConfigForSelector;
|
||||
@property (nonatomic, readonly, nonnull, strong) NSMutableDictionary * cellConfigIfDisabled;
|
||||
@property (nonatomic, readonly, nonnull, strong) NSMutableDictionary * cellConfigAtConfigure;
|
||||
|
||||
@property (nonnull) id disabled;
|
||||
@property (nonatomic, nonnull, strong) id disabled;
|
||||
-(BOOL)isDisabled;
|
||||
@property (nonnull) id hidden;
|
||||
|
||||
@property (nonatomic, nonnull, strong) id hidden;
|
||||
-(BOOL)isHidden;
|
||||
@property (getter=isRequired) BOOL required;
|
||||
|
||||
@property (nonnull) XLFormAction * action;
|
||||
@property (getter=isRequired, nonatomic, assign) BOOL required;
|
||||
|
||||
@property (weak, null_unspecified) XLFormSectionDescriptor * sectionDescriptor;
|
||||
@property (nonatomic, nonnull, strong) XLFormAction * action;
|
||||
|
||||
@property (nonatomic, weak, null_unspecified) XLFormSectionDescriptor * sectionDescriptor;
|
||||
|
||||
+(nonnull instancetype)formRowDescriptorWithTag:(nullable NSString *)tag rowType:(nonnull NSString *)rowType;
|
||||
+(nonnull instancetype)formRowDescriptorWithTag:(nullable NSString *)tag rowType:(nonnull NSString *)rowType title:(nullable NSString *)title;
|
||||
@@ -87,7 +89,7 @@ typedef void(^XLOnChangeBlock)(id __nullable oldValue,id __nullable newValue,XLF
|
||||
|
||||
-(nonnull XLFormBaseCell *)cellForFormController:(nonnull XLFormViewController *)formController;
|
||||
|
||||
@property (nullable) NSString *requireMsg;
|
||||
@property (nonatomic, nullable, copy) NSString *requireMsg;
|
||||
-(void)addValidator:(nonnull id<XLFormValidatorProtocol>)validator;
|
||||
-(void)removeValidator:(nonnull id<XLFormValidatorProtocol>)validator;
|
||||
-(nullable XLFormValidationStatus *)doValidation;
|
||||
@@ -95,9 +97,9 @@ typedef void(^XLOnChangeBlock)(id __nullable oldValue,id __nullable newValue,XLF
|
||||
// ===========================
|
||||
// property used for Selectors
|
||||
// ===========================
|
||||
@property (nullable) NSString * noValueDisplayText;
|
||||
@property (nullable) NSString * selectorTitle;
|
||||
@property (nullable) NSArray * selectorOptions;
|
||||
@property (nonatomic, nullable, copy) NSString * noValueDisplayText;
|
||||
@property (nonatomic, nullable, copy) NSString * selectorTitle;
|
||||
@property (nonatomic, nullable, strong) NSArray * selectorOptions;
|
||||
|
||||
@property (null_unspecified) id leftRightSelectorLeftOptionSelected;
|
||||
|
||||
@@ -126,13 +128,13 @@ typedef NS_ENUM(NSUInteger, XLFormLeftRightSelectorOptionLeftValueChangePolicy)
|
||||
@interface XLFormLeftRightSelectorOption : NSObject
|
||||
|
||||
@property (nonatomic, assign) XLFormLeftRightSelectorOptionLeftValueChangePolicy leftValueChangePolicy;
|
||||
@property (readonly, nonnull) id leftValue;
|
||||
@property (readonly, nonnull) NSArray * rightOptions;
|
||||
@property (readonly, null_unspecified) NSString * httpParameterKey;
|
||||
@property (nullable) Class rightSelectorControllerClass;
|
||||
@property (nonatomic, readonly, nonnull) id leftValue;
|
||||
@property (nonatomic, readonly, nonnull) NSArray * rightOptions;
|
||||
@property (nonatomic, readonly, null_unspecified, copy) NSString * httpParameterKey;
|
||||
@property (nonatomic, nullable) Class rightSelectorControllerClass;
|
||||
|
||||
@property (nullable) NSString * noValueDisplayText;
|
||||
@property (nullable) NSString * selectorTitle;
|
||||
@property (nonatomic, nullable, copy) NSString * noValueDisplayText;
|
||||
@property (nonatomic, nullable, copy) NSString * selectorTitle;
|
||||
|
||||
|
||||
+(nonnull XLFormLeftRightSelectorOption *)formLeftRightSelectorOptionWithLeftValue:(nonnull id)leftValue
|
||||
@@ -154,16 +156,16 @@ typedef NS_ENUM(NSUInteger, XLFormLeftRightSelectorOptionLeftValueChangePolicy)
|
||||
|
||||
@interface XLFormAction : NSObject
|
||||
|
||||
@property (nullable, nonatomic, strong) Class viewControllerClass;
|
||||
@property (nullable, nonatomic, strong) NSString * viewControllerStoryboardId;
|
||||
@property (nullable, nonatomic, strong) NSString * viewControllerNibName;
|
||||
@property (nullable, nonatomic) Class viewControllerClass;
|
||||
@property (nullable, nonatomic, copy) NSString * viewControllerStoryboardId;
|
||||
@property (nullable, nonatomic, copy) NSString * viewControllerNibName;
|
||||
|
||||
@property (nonatomic) XLFormPresentationMode viewControllerPresentationMode;
|
||||
@property (nonatomic, assign) XLFormPresentationMode viewControllerPresentationMode;
|
||||
|
||||
@property (nullable, nonatomic, strong) void (^formBlock)(XLFormRowDescriptor * __nonnull sender);
|
||||
@property (nullable, nonatomic, copy) void (^formBlock)(XLFormRowDescriptor * __nonnull sender);
|
||||
@property (nullable, nonatomic) SEL formSelector;
|
||||
@property (nullable, nonatomic, strong) NSString * formSegueIdenfifier DEPRECATED_ATTRIBUTE DEPRECATED_MSG_ATTRIBUTE("Use formSegueIdentifier instead");
|
||||
@property (nullable, nonatomic, strong) NSString * formSegueIdentifier;
|
||||
@property (nullable, nonatomic, strong) Class formSegueClass;
|
||||
@property (nullable, nonatomic, copy) NSString * formSegueIdenfifier DEPRECATED_ATTRIBUTE DEPRECATED_MSG_ATTRIBUTE("Use formSegueIdentifier instead");
|
||||
@property (nullable, nonatomic, copy) NSString * formSegueIdentifier;
|
||||
@property (nullable, nonatomic) Class formSegueClass;
|
||||
|
||||
@end
|
||||
@@ -33,7 +33,7 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
@interface XLFormDescriptor (_XLFormRowDescriptor)
|
||||
|
||||
@property (readonly) NSDictionary* allRowsByTag;
|
||||
@property (nonatomic, readonly, strong) NSDictionary *allRowsByTag;
|
||||
|
||||
-(void)addObserversOfObject:(id)sectionOrRow predicateType:(XLPredicateType)predicateType;
|
||||
-(void)removeObserversOfObject:(id)sectionOrRow predicateType:(XLPredicateType)predicateType;
|
||||
@@ -42,22 +42,26 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
@interface XLFormSectionDescriptor (_XLFormRowDescriptor)
|
||||
|
||||
-(void)showFormRow:(XLFormRowDescriptor*)formRow;
|
||||
-(void)hideFormRow:(XLFormRowDescriptor*)formRow;
|
||||
-(void)showFormRow:(XLFormRowDescriptor *)formRow;
|
||||
-(void)hideFormRow:(XLFormRowDescriptor *)formRow;
|
||||
|
||||
@end
|
||||
|
||||
#import "NSObject+XLFormAdditions.h"
|
||||
|
||||
NSString * const XLValueKey = @"value";
|
||||
NSString * const XLDisablePredicateCacheKey = @"disablePredicateCache";
|
||||
NSString * const XLHidePredicateCacheKey = @"hidePredicateCache";
|
||||
|
||||
@interface XLFormRowDescriptor() <NSCopying>
|
||||
|
||||
@property XLFormBaseCell * cell;
|
||||
@property (nonatomic) NSMutableArray *validators;
|
||||
@property (nonatomic, strong) XLFormBaseCell *cell;
|
||||
@property (nonatomic, strong) NSMutableArray *validators;
|
||||
|
||||
@property BOOL isDirtyDisablePredicateCache;
|
||||
@property (nonatomic) NSNumber* disablePredicateCache;
|
||||
@property BOOL isDirtyHidePredicateCache;
|
||||
@property (nonatomic) NSNumber* hidePredicateCache;
|
||||
@property (nonatomic, assign) BOOL isDirtyDisablePredicateCache;
|
||||
@property (nonatomic, copy ) NSNumber *disablePredicateCache;
|
||||
@property (nonatomic, assign) BOOL isDirtyHidePredicateCache;
|
||||
@property (nonatomic, copy ) NSNumber *hidePredicateCache;
|
||||
|
||||
@end
|
||||
|
||||
@@ -81,8 +85,7 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(instancetype)initWithTag:(NSString *)tag rowType:(NSString *)rowType title:(NSString *)title;
|
||||
{
|
||||
self = [super init];
|
||||
if (self){
|
||||
if (self = [super init]) {
|
||||
NSAssert(((![rowType isEqualToString:XLFormRowDescriptorTypeSelectorPopover] && ![rowType isEqualToString:XLFormRowDescriptorTypeMultipleSelectorPopover]) || (([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) && ([rowType isEqualToString:XLFormRowDescriptorTypeSelectorPopover] || [rowType isEqualToString:XLFormRowDescriptorTypeMultipleSelectorPopover]))), @"You must be running under UIUserInterfaceIdiomPad to use either XLFormRowDescriptorTypeSelectorPopover or XLFormRowDescriptorTypeMultipleSelectorPopover rows.");
|
||||
_tag = tag;
|
||||
_disabled = @NO;
|
||||
@@ -99,11 +102,19 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
_isDirtyHidePredicateCache = YES;
|
||||
_hidePredicateCache = nil;
|
||||
_height = XLFormRowInitialHeight;
|
||||
[self addObserver:self forKeyPath:@"value" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
[self addObserver:self forKeyPath:@"disablePredicateCache" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
[self addObserver:self forKeyPath:@"hidePredicateCache" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
|
||||
[self addObserver:self
|
||||
forKeyPath:XLValueKey
|
||||
options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
[self addObserver:self
|
||||
forKeyPath:XLDisablePredicateCacheKey
|
||||
options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
[self addObserver:self
|
||||
forKeyPath:XLHidePredicateCacheKey
|
||||
options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -119,13 +130,17 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(XLFormBaseCell *)cellForFormController:(XLFormViewController * __unused)formController
|
||||
{
|
||||
if (!_cell){
|
||||
if (!_cell) {
|
||||
id cellClass = self.cellClass ?: [XLFormViewController cellClassesForRowDescriptorTypes][self.rowType];
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSString *cellClassString = cellClass;
|
||||
NSString *cellResource = nil;
|
||||
NSBundle *bundleForCaller = [NSBundle bundleForClass:self.class];
|
||||
|
||||
NSAssert(cellClass, @"Not defined XLFormRowDescriptorType: %@", self.rowType ?: @"");
|
||||
|
||||
if ([cellClass isKindOfClass:[NSString class]]) {
|
||||
NSString *cellClassString = cellClass;
|
||||
NSString *cellResource = nil;
|
||||
NSBundle *bundle = nil;
|
||||
if ([cellClassString rangeOfString:@"/"].location != NSNotFound) {
|
||||
NSArray *components = [cellClassString componentsSeparatedByString:@"/"];
|
||||
cellResource = [components lastObject];
|
||||
@@ -133,94 +148,111 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
NSString *bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:folderName];
|
||||
bundle = [NSBundle bundleWithPath:bundlePath];
|
||||
} else {
|
||||
bundle = [NSBundle bundleForClass:NSClassFromString(cellClass)];
|
||||
cellResource = cellClassString;
|
||||
}
|
||||
NSParameterAssert(bundle != nil);
|
||||
NSParameterAssert(cellResource != nil);
|
||||
|
||||
if ([bundle pathForResource:cellResource ofType:@"nib"]){
|
||||
_cell = [[bundle loadNibNamed:cellResource owner:nil options:nil] firstObject];
|
||||
cellResource = [cellClassString componentsSeparatedByString:@"."].lastObject;
|
||||
}
|
||||
} else {
|
||||
cellResource = [NSStringFromClass(cellClass) componentsSeparatedByString:@"."].lastObject;
|
||||
}
|
||||
|
||||
if ([bundle pathForResource:cellResource ofType:@"nib"]) {
|
||||
_cell = [[bundle loadNibNamed:cellResource owner:nil options:nil] firstObject];
|
||||
} else if ([bundleForCaller pathForResource:cellResource ofType:@"nib"]) {
|
||||
_cell = [[bundleForCaller loadNibNamed:cellResource owner:nil options:nil] firstObject];
|
||||
} else {
|
||||
_cell = [[cellClass alloc] initWithStyle:self.cellStyle reuseIdentifier:nil];
|
||||
}
|
||||
|
||||
_cell.rowDescriptor = self;
|
||||
|
||||
NSAssert([_cell isKindOfClass:[XLFormBaseCell class]], @"UITableViewCell must extend from XLFormBaseCell");
|
||||
|
||||
[self configureCellAtCreationTime];
|
||||
}
|
||||
|
||||
return _cell;
|
||||
}
|
||||
|
||||
- (void)configureCellAtCreationTime
|
||||
{
|
||||
[self.cellConfigAtConfigure enumerateKeysAndObjectsUsingBlock:^(NSString *keyPath, id value, __unused BOOL *stop) {
|
||||
[_cell setValue:(value == [NSNull null]) ? nil : value forKeyPath:keyPath];
|
||||
[self.cell setValue:(value == [NSNull null]) ? nil : value forKeyPath:keyPath];
|
||||
}];
|
||||
}
|
||||
|
||||
-(NSMutableDictionary *)cellConfig
|
||||
{
|
||||
if (_cellConfig) return _cellConfig;
|
||||
_cellConfig = [NSMutableDictionary dictionary];
|
||||
if (!_cellConfig) {
|
||||
_cellConfig = [NSMutableDictionary dictionary];
|
||||
}
|
||||
|
||||
return _cellConfig;
|
||||
}
|
||||
|
||||
-(NSMutableDictionary *)cellConfigForSelector
|
||||
{
|
||||
if (_cellConfigForSelector) return _cellConfigForSelector;
|
||||
_cellConfigForSelector = [NSMutableDictionary dictionary];
|
||||
if (!_cellConfigForSelector) {
|
||||
_cellConfigForSelector = [NSMutableDictionary dictionary];
|
||||
}
|
||||
|
||||
return _cellConfigForSelector;
|
||||
}
|
||||
|
||||
|
||||
-(NSMutableDictionary *)cellConfigIfDisabled
|
||||
{
|
||||
if (_cellConfigIfDisabled) return _cellConfigIfDisabled;
|
||||
_cellConfigIfDisabled = [NSMutableDictionary dictionary];
|
||||
if (!_cellConfigIfDisabled) {
|
||||
_cellConfigIfDisabled = [NSMutableDictionary dictionary];
|
||||
}
|
||||
|
||||
return _cellConfigIfDisabled;
|
||||
}
|
||||
|
||||
-(NSMutableDictionary *)cellConfigAtConfigure
|
||||
{
|
||||
if (_cellConfigAtConfigure) return _cellConfigAtConfigure;
|
||||
_cellConfigAtConfigure = [NSMutableDictionary dictionary];
|
||||
if (!_cellConfigAtConfigure) {
|
||||
_cellConfigAtConfigure = [NSMutableDictionary dictionary];
|
||||
}
|
||||
|
||||
return _cellConfigAtConfigure;
|
||||
}
|
||||
|
||||
-(NSString*)editTextValue
|
||||
-(NSString *)editTextValue
|
||||
{
|
||||
NSString *result = @"";
|
||||
|
||||
if (self.value) {
|
||||
if (self.valueFormatter) {
|
||||
if (self.useValueFormatterDuringInput) {
|
||||
return [self displayTextValue];
|
||||
}else{
|
||||
// have formatter, but we don't want to use it during editing
|
||||
return [self.value displayText];
|
||||
result = [self displayTextValue];
|
||||
}
|
||||
else {
|
||||
// have formatter, but we don't want to use it during editing
|
||||
result = [self.value displayText];
|
||||
}
|
||||
}else{
|
||||
// have value, but no formatter, use the value's displayText
|
||||
return [self.value displayText];
|
||||
}
|
||||
}else{
|
||||
// placeholder
|
||||
return @"";
|
||||
else {
|
||||
// have value, but no formatter, use the value's displayText
|
||||
result = [self.value displayText];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
-(NSString*)displayTextValue
|
||||
-(NSString *)displayTextValue
|
||||
{
|
||||
NSString *result = self.noValueDisplayText;
|
||||
|
||||
if (self.value) {
|
||||
if (self.valueFormatter) {
|
||||
return [self.valueFormatter stringForObjectValue:self.value];
|
||||
result = [self.valueFormatter stringForObjectValue:self.value];
|
||||
}
|
||||
else{
|
||||
return [self.value displayText];
|
||||
else {
|
||||
result = [self.value displayText];
|
||||
}
|
||||
}
|
||||
else {
|
||||
return self.noValueDisplayText;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
-(NSString *)description
|
||||
@@ -230,9 +262,10 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(XLFormAction *)action
|
||||
{
|
||||
if (!_action){
|
||||
if (!_action) {
|
||||
_action = [[XLFormAction alloc] init];
|
||||
}
|
||||
|
||||
return _action;
|
||||
}
|
||||
|
||||
@@ -243,13 +276,15 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(CGFloat)height
|
||||
{
|
||||
if (_height == XLFormRowInitialHeight){
|
||||
if (_height == XLFormRowInitialHeight) {
|
||||
if ([[self.cell class] respondsToSelector:@selector(formDescriptorCellHeightForRowDescriptor:)]){
|
||||
return [[self.cell class] formDescriptorCellHeightForRowDescriptor:self];
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
_height = XLFormUnspecifiedCellHeight;
|
||||
}
|
||||
}
|
||||
|
||||
return _height;
|
||||
}
|
||||
|
||||
@@ -260,71 +295,76 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
// In the implementation
|
||||
-(id)copyWithZone:(NSZone *)zone
|
||||
{
|
||||
XLFormRowDescriptor * rowDescriptorCopy = [XLFormRowDescriptor formRowDescriptorWithTag:nil rowType:[self.rowType copy] title:[self.title copy]];
|
||||
XLFormRowDescriptor *rowDescriptorCopy = [XLFormRowDescriptor formRowDescriptorWithTag:nil
|
||||
rowType:[self.rowType copy]
|
||||
title:[self.title copy]];
|
||||
rowDescriptorCopy.cellClass = [self.cellClass copy];
|
||||
[rowDescriptorCopy.cellConfig addEntriesFromDictionary:self.cellConfig];
|
||||
[rowDescriptorCopy.cellConfigAtConfigure addEntriesFromDictionary:self.cellConfigAtConfigure];
|
||||
rowDescriptorCopy.valueTransformer = [self.valueTransformer copy];
|
||||
rowDescriptorCopy->_hidden = _hidden;
|
||||
rowDescriptorCopy->_disabled = _disabled;
|
||||
rowDescriptorCopy.hidden = self.hidden;
|
||||
rowDescriptorCopy.disabled = self.disabled;
|
||||
rowDescriptorCopy.required = self.isRequired;
|
||||
rowDescriptorCopy.isDirtyDisablePredicateCache = YES;
|
||||
rowDescriptorCopy.isDirtyHidePredicateCache = YES;
|
||||
rowDescriptorCopy.validators = [self.validators mutableCopy];
|
||||
|
||||
|
||||
// =====================
|
||||
// properties for Button
|
||||
// =====================
|
||||
rowDescriptorCopy.action = [self.action copy];
|
||||
|
||||
|
||||
|
||||
|
||||
// ===========================
|
||||
// property used for Selectors
|
||||
// ===========================
|
||||
|
||||
|
||||
rowDescriptorCopy.noValueDisplayText = [self.noValueDisplayText copy];
|
||||
rowDescriptorCopy.selectorTitle = [self.selectorTitle copy];
|
||||
rowDescriptorCopy.selectorOptions = [self.selectorOptions copy];
|
||||
rowDescriptorCopy.leftRightSelectorLeftOptionSelected = [self.leftRightSelectorLeftOptionSelected copy];
|
||||
|
||||
|
||||
return rowDescriptorCopy;
|
||||
}
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
[self removeObserver:self forKeyPath:XLValueKey];
|
||||
[self removeObserver:self forKeyPath:XLDisablePredicateCacheKey];
|
||||
[self removeObserver:self forKeyPath:XLHidePredicateCacheKey];
|
||||
|
||||
[self.sectionDescriptor.formDescriptor removeObserversOfObject:self predicateType:XLPredicateTypeDisabled];
|
||||
[self.sectionDescriptor.formDescriptor removeObserversOfObject:self predicateType:XLPredicateTypeHidden];
|
||||
@try {
|
||||
[self removeObserver:self forKeyPath:@"value"];
|
||||
}
|
||||
@catch (NSException * __unused exception) {}
|
||||
@try {
|
||||
[self removeObserver:self forKeyPath:@"disablePredicateCache"];
|
||||
}
|
||||
@catch (NSException * __unused exception) {}
|
||||
@try {
|
||||
[self removeObserver:self forKeyPath:@"hidePredicateCache"];
|
||||
}
|
||||
@catch (NSException * __unused exception) {}
|
||||
|
||||
_cell = nil;
|
||||
|
||||
[self.validators removeAllObjects];
|
||||
self.validators = nil;
|
||||
}
|
||||
|
||||
#pragma mark - KVO
|
||||
|
||||
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||
{
|
||||
if (!self.sectionDescriptor) return;
|
||||
if (object == self && ([keyPath isEqualToString:@"value"] || [keyPath isEqualToString:@"hidePredicateCache"] || [keyPath isEqualToString:@"disablePredicateCache"])){
|
||||
if (!self.sectionDescriptor) {
|
||||
return;
|
||||
}
|
||||
else if (object == self && ([keyPath isEqualToString:XLValueKey] ||
|
||||
[keyPath isEqualToString:XLHidePredicateCacheKey] || [keyPath isEqualToString:XLDisablePredicateCacheKey])) {
|
||||
if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeSetting)]){
|
||||
id newValue = [change objectForKey:NSKeyValueChangeNewKey];
|
||||
id oldValue = [change objectForKey:NSKeyValueChangeOldKey];
|
||||
if ([keyPath isEqualToString:@"value"]){
|
||||
if ([keyPath isEqualToString:XLValueKey]) {
|
||||
[self.sectionDescriptor.formDescriptor.delegate formRowDescriptorValueHasChanged:object oldValue:oldValue newValue:newValue];
|
||||
if (self.onChangeBlock) {
|
||||
self.onChangeBlock(oldValue, newValue, self);
|
||||
}
|
||||
}
|
||||
else{
|
||||
[self.sectionDescriptor.formDescriptor.delegate formRowDescriptorPredicateHasChanged:object oldValue:oldValue newValue:newValue predicateType:([keyPath isEqualToString:@"hidePredicateCache"] ? XLPredicateTypeHidden : XLPredicateTypeDisabled)];
|
||||
else {
|
||||
[self.sectionDescriptor.formDescriptor.delegate formRowDescriptorPredicateHasChanged:object
|
||||
oldValue:oldValue
|
||||
newValue:newValue
|
||||
predicateType:([keyPath isEqualToString:XLHidePredicateCacheKey] ? XLPredicateTypeHidden : XLPredicateTypeDisabled)];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -334,12 +374,14 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(BOOL)isDisabled
|
||||
{
|
||||
if (self.sectionDescriptor.formDescriptor.isDisabled){
|
||||
if (self.sectionDescriptor.formDescriptor.isDisabled) {
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (self.isDirtyDisablePredicateCache) {
|
||||
[self evaluateIsDisabled];
|
||||
}
|
||||
|
||||
return [self.disablePredicateCache boolValue];
|
||||
}
|
||||
|
||||
@@ -348,11 +390,12 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
if ([_disabled isKindOfClass:[NSPredicate class]]){
|
||||
[self.sectionDescriptor.formDescriptor removeObserversOfObject:self predicateType:XLPredicateTypeDisabled];
|
||||
}
|
||||
|
||||
_disabled = [disabled isKindOfClass:[NSString class]] ? [disabled formPredicate] : disabled;
|
||||
if ([_disabled isKindOfClass:[NSPredicate class]]){
|
||||
[self.sectionDescriptor.formDescriptor addObserversOfObject:self predicateType:XLPredicateTypeDisabled];
|
||||
}
|
||||
|
||||
|
||||
[self evaluateIsDisabled];
|
||||
}
|
||||
|
||||
@@ -361,7 +404,8 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
if ([_disabled isKindOfClass:[NSPredicate class]]) {
|
||||
if (!self.sectionDescriptor.formDescriptor) {
|
||||
self.isDirtyDisablePredicateCache = YES;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
@try {
|
||||
self.disablePredicateCache = @([_disabled evaluateWithObject:self substitutionVariables:self.sectionDescriptor.formDescriptor.allRowsByTag ?: @{}]);
|
||||
}
|
||||
@@ -371,12 +415,14 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
};
|
||||
}
|
||||
}
|
||||
else{
|
||||
else {
|
||||
self.disablePredicateCache = _disabled;
|
||||
}
|
||||
if ([self.disablePredicateCache boolValue]){
|
||||
|
||||
if ([self.disablePredicateCache boolValue]) {
|
||||
[self.cell resignFirstResponder];
|
||||
}
|
||||
|
||||
return [self.disablePredicateCache boolValue];
|
||||
}
|
||||
|
||||
@@ -387,9 +433,9 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(void)setDisablePredicateCache:(NSNumber*)disablePredicateCache
|
||||
{
|
||||
NSParameterAssert(disablePredicateCache);
|
||||
NSParameterAssert(disablePredicateCache != nil);
|
||||
self.isDirtyDisablePredicateCache = NO;
|
||||
if (!_disablePredicateCache || ![_disablePredicateCache isEqualToNumber:disablePredicateCache]){
|
||||
if (_disablePredicateCache == nil || ![_disablePredicateCache isEqualToNumber:disablePredicateCache]){
|
||||
_disablePredicateCache = disablePredicateCache;
|
||||
}
|
||||
}
|
||||
@@ -408,9 +454,9 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(void)setHidePredicateCache:(NSNumber *)hidePredicateCache
|
||||
{
|
||||
NSParameterAssert(hidePredicateCache);
|
||||
NSParameterAssert(hidePredicateCache != nil);
|
||||
self.isDirtyHidePredicateCache = NO;
|
||||
if (!_hidePredicateCache || ![_hidePredicateCache isEqualToNumber:hidePredicateCache]){
|
||||
if (_hidePredicateCache == nil || ![_hidePredicateCache isEqualToNumber:hidePredicateCache]){
|
||||
_hidePredicateCache = hidePredicateCache;
|
||||
}
|
||||
}
|
||||
@@ -420,6 +466,7 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
if (self.isDirtyHidePredicateCache) {
|
||||
return [self evaluateIsHidden];
|
||||
}
|
||||
|
||||
return [self.hidePredicateCache boolValue];
|
||||
}
|
||||
|
||||
@@ -428,7 +475,8 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]) {
|
||||
if (!self.sectionDescriptor.formDescriptor) {
|
||||
self.isDirtyHidePredicateCache = YES;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
@try {
|
||||
self.hidePredicateCache = @([_hidden evaluateWithObject:self substitutionVariables:self.sectionDescriptor.formDescriptor.allRowsByTag ?: @{}]);
|
||||
}
|
||||
@@ -438,16 +486,18 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
};
|
||||
}
|
||||
}
|
||||
else{
|
||||
else {
|
||||
self.hidePredicateCache = _hidden;
|
||||
}
|
||||
|
||||
if ([self.hidePredicateCache boolValue]){
|
||||
[self.cell resignFirstResponder];
|
||||
[self.sectionDescriptor hideFormRow:self];
|
||||
}
|
||||
else{
|
||||
else {
|
||||
[self.sectionDescriptor showFormRow:self];
|
||||
}
|
||||
|
||||
return [self.hidePredicateCache boolValue];
|
||||
}
|
||||
|
||||
@@ -457,10 +507,12 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]){
|
||||
[self.sectionDescriptor.formDescriptor removeObserversOfObject:self predicateType:XLPredicateTypeHidden];
|
||||
}
|
||||
|
||||
_hidden = [hidden isKindOfClass:[NSString class]] ? [hidden formPredicate] : hidden;
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]){
|
||||
[self.sectionDescriptor.formDescriptor addObserversOfObject:self predicateType:XLPredicateTypeHidden];
|
||||
}
|
||||
|
||||
[self evaluateIsHidden]; // check and update if this row should be hidden.
|
||||
}
|
||||
|
||||
@@ -474,34 +526,35 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(void)addValidator:(id<XLFormValidatorProtocol>)validator
|
||||
{
|
||||
if (validator == nil || ![validator conformsToProtocol:@protocol(XLFormValidatorProtocol)])
|
||||
if (validator == nil || ![validator conformsToProtocol:@protocol(XLFormValidatorProtocol)]) {
|
||||
return;
|
||||
|
||||
if(![self.validators containsObject:validator]) {
|
||||
}
|
||||
else if (![self.validators containsObject:validator]) {
|
||||
[self.validators addObject:validator];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)removeValidator:(id<XLFormValidatorProtocol>)validator
|
||||
{
|
||||
if (validator == nil|| ![validator conformsToProtocol:@protocol(XLFormValidatorProtocol)])
|
||||
if (validator == nil || ![validator conformsToProtocol:@protocol(XLFormValidatorProtocol)]) {
|
||||
return;
|
||||
|
||||
if ([self.validators containsObject:validator]) {
|
||||
}
|
||||
else if ([self.validators containsObject:validator]) {
|
||||
[self.validators removeObject:validator];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)valueIsEmpty
|
||||
{
|
||||
return self.value == nil || [self.value isKindOfClass:[NSNull class]] || ([self.value respondsToSelector:@selector(length)] && [self.value length]==0) ||
|
||||
([self.value respondsToSelector:@selector(count)] && [self.value count]==0);
|
||||
return self.value == nil || [self.value isKindOfClass:[NSNull class]] ||
|
||||
([self.value respondsToSelector:@selector(length)] && [self.value length] == 0) ||
|
||||
([self.value respondsToSelector:@selector(count)] && [self.value count] == 0);
|
||||
}
|
||||
|
||||
-(XLFormValidationStatus *)doValidation
|
||||
{
|
||||
XLFormValidationStatus *valStatus = nil;
|
||||
|
||||
|
||||
if (self.required) {
|
||||
// do required validation here
|
||||
if ([self valueIsEmpty]) {
|
||||
@@ -509,22 +562,24 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
NSString *msg = nil;
|
||||
if (self.requireMsg != nil) {
|
||||
msg = self.requireMsg;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// default message for required msg
|
||||
msg = NSLocalizedString(@"%@ can't be empty", nil);
|
||||
}
|
||||
|
||||
if (self.title != nil) {
|
||||
|
||||
if (self.title.length) {
|
||||
valStatus.msg = [NSString stringWithFormat:msg, self.title];
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
valStatus.msg = [NSString stringWithFormat:msg, self.tag];
|
||||
}
|
||||
|
||||
|
||||
return valStatus;
|
||||
}
|
||||
}
|
||||
// custom validator
|
||||
for(id<XLFormValidatorProtocol> v in self.validators) {
|
||||
for (id<XLFormValidatorProtocol> v in self.validators) {
|
||||
if ([v conformsToProtocol:@protocol(XLFormValidatorProtocol)]) {
|
||||
XLFormValidationStatus *vStatus = [v isValid:self];
|
||||
// fail validation
|
||||
@@ -532,10 +587,12 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
return vStatus;
|
||||
}
|
||||
valStatus = vStatus;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
valStatus = nil;
|
||||
}
|
||||
}
|
||||
|
||||
return valStatus;
|
||||
}
|
||||
|
||||
@@ -591,13 +648,13 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
-(instancetype)initWithLeftValue:(NSString *)leftValue httpParameterKey:(NSString *)httpParameterKey rightOptions:(NSArray *)rightOptions
|
||||
{
|
||||
self = [super init];
|
||||
if (self){
|
||||
if (self = [super init]) {
|
||||
_selectorTitle = nil;
|
||||
_leftValue = leftValue;
|
||||
_rightOptions = rightOptions;
|
||||
_httpParameterKey = httpParameterKey;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -608,10 +665,10 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
if (self = [super init]) {
|
||||
_viewControllerPresentationMode = XLFormPresentationModeDefault;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -623,24 +680,25 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
if (self.viewControllerClass){
|
||||
actionCopy.viewControllerClass = [self.viewControllerClass copy];
|
||||
}
|
||||
else if ([self.viewControllerStoryboardId length] != 0){
|
||||
else if ([self.viewControllerStoryboardId length] != 0) {
|
||||
actionCopy.viewControllerStoryboardId = [self.viewControllerStoryboardId copy];
|
||||
}
|
||||
else if ([self.viewControllerNibName length] != 0){
|
||||
else if ([self.viewControllerNibName length] != 0) {
|
||||
actionCopy.viewControllerNibName = [self.viewControllerNibName copy];
|
||||
}
|
||||
if (self.formBlock){
|
||||
if (self.formBlock) {
|
||||
actionCopy.formBlock = [self.formBlock copy];
|
||||
}
|
||||
else if (self.formSelector){
|
||||
else if (self.formSelector) {
|
||||
actionCopy.formSelector = self.formSelector;
|
||||
}
|
||||
else if (self.formSegueIdentifier){
|
||||
else if (self.formSegueIdentifier) {
|
||||
actionCopy.formSegueIdentifier = [self.formSegueIdentifier copy];
|
||||
}
|
||||
else if (self.formSegueClass){
|
||||
actionCopy.formSegueClass = [self.formSegueClass copy];
|
||||
}
|
||||
|
||||
return actionCopy;
|
||||
}
|
||||
|
||||
@@ -665,7 +723,6 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
_viewControllerStoryboardId = viewControllerStoryboardId;
|
||||
}
|
||||
|
||||
|
||||
-(void)setFormSelector:(SEL)formSelector
|
||||
{
|
||||
_formBlock = nil;
|
||||
@@ -674,7 +731,6 @@ CGFloat XLFormRowInitialHeight = -2;
|
||||
_formSelector = formSelector;
|
||||
}
|
||||
|
||||
|
||||
-(void)setFormBlock:(void (^)(XLFormRowDescriptor *))formBlock
|
||||
{
|
||||
_formSegueClass = nil;
|
||||
+1
-1
@@ -30,6 +30,6 @@
|
||||
@protocol XLFormRowDescriptorViewController <NSObject>
|
||||
|
||||
@required
|
||||
@property (nonatomic) XLFormRowDescriptor * rowDescriptor;
|
||||
@property (nonatomic, weak) XLFormRowDescriptor * rowDescriptor;
|
||||
|
||||
@end
|
||||
+3
-3
@@ -27,8 +27,8 @@
|
||||
|
||||
@interface XLFormRowNavigationAccessoryView : UIToolbar
|
||||
|
||||
@property (nonatomic) UIBarButtonItem *previousButton;
|
||||
@property (nonatomic) UIBarButtonItem *nextButton;
|
||||
@property (nonatomic) UIBarButtonItem *doneButton;
|
||||
@property (nonatomic, weak) UIBarButtonItem *previousButton;
|
||||
@property (nonatomic, weak) UIBarButtonItem *nextButton;
|
||||
@property (nonatomic, weak) UIBarButtonItem *doneButton;
|
||||
|
||||
@end
|
||||
+18
-51
@@ -25,14 +25,6 @@
|
||||
|
||||
#import "XLFormRowNavigationAccessoryView.h"
|
||||
|
||||
|
||||
@interface XLFormRowNavigationAccessoryView ()
|
||||
|
||||
@property (nonatomic) UIBarButtonItem *fixedSpace;
|
||||
@property (nonatomic) UIBarButtonItem *flexibleSpace;
|
||||
|
||||
@end
|
||||
|
||||
@implementation XLFormRowNavigationAccessoryView
|
||||
|
||||
@synthesize previousButton = _previousButton;
|
||||
@@ -44,55 +36,30 @@
|
||||
{
|
||||
self = [super initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44.0)];
|
||||
if (self) {
|
||||
|
||||
UIBarButtonItem *previousButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:nil action:nil];
|
||||
_previousButton = previousButton;
|
||||
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:nil action:nil];
|
||||
_nextButton = nextButton;
|
||||
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil];
|
||||
_doneButton = doneButton;
|
||||
|
||||
UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
|
||||
fixedSpace.width = 22.0;
|
||||
|
||||
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
|
||||
|
||||
self.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth);
|
||||
NSArray * items = [NSArray arrayWithObjects:self.previousButton,
|
||||
self.fixedSpace,
|
||||
self.nextButton,
|
||||
self.flexibleSpace,
|
||||
self.doneButton, nil];
|
||||
NSArray * items = [NSArray arrayWithObjects:previousButton,
|
||||
fixedSpace,
|
||||
nextButton,
|
||||
flexibleSpace,
|
||||
doneButton, nil];
|
||||
[self setItems:items];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
-(UIBarButtonItem *)previousButton
|
||||
{
|
||||
if (_previousButton) return _previousButton;
|
||||
_previousButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:nil action:nil];
|
||||
return _previousButton;
|
||||
}
|
||||
|
||||
-(UIBarButtonItem *)fixedSpace
|
||||
{
|
||||
if (_fixedSpace) return _fixedSpace;
|
||||
_fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
|
||||
_fixedSpace.width = 22.0;
|
||||
return _fixedSpace;
|
||||
}
|
||||
|
||||
-(UIBarButtonItem *)nextButton
|
||||
{
|
||||
if (_nextButton) return _nextButton;
|
||||
_nextButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:nil action:nil];
|
||||
return _nextButton;
|
||||
}
|
||||
|
||||
-(UIBarButtonItem *)flexibleSpace
|
||||
{
|
||||
if (_flexibleSpace) return _flexibleSpace;
|
||||
_flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
|
||||
return _flexibleSpace;
|
||||
}
|
||||
|
||||
-(UIBarButtonItem *)doneButton
|
||||
{
|
||||
if (_doneButton) return _doneButton;
|
||||
_doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil];
|
||||
return _doneButton;
|
||||
}
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event
|
||||
+10
-10
@@ -42,19 +42,19 @@ typedef NS_ENUM(NSUInteger, XLFormSectionInsertMode) {
|
||||
|
||||
@interface XLFormSectionDescriptor : NSObject
|
||||
|
||||
@property (nonatomic, nullable) NSString * title;
|
||||
@property (nonatomic, nullable) NSString * footerTitle;
|
||||
@property (readonly, nonnull) NSMutableArray * formRows;
|
||||
@property (nonatomic, nullable, copy) NSString * title;
|
||||
@property (nonatomic, nullable, copy) NSString * footerTitle;
|
||||
@property (nonatomic, readonly, nonnull, strong) NSMutableArray * formRows;
|
||||
|
||||
@property (readonly) XLFormSectionInsertMode sectionInsertMode;
|
||||
@property (readonly) XLFormSectionOptions sectionOptions;
|
||||
@property (nullable) XLFormRowDescriptor * multivaluedRowTemplate;
|
||||
@property (readonly, nullable) XLFormRowDescriptor * multivaluedAddButton;
|
||||
@property (nonatomic, nullable) NSString * multivaluedTag;
|
||||
@property (nonatomic, readonly, assign) XLFormSectionInsertMode sectionInsertMode;
|
||||
@property (nonatomic, readonly, assign) XLFormSectionOptions sectionOptions;
|
||||
@property (nonatomic, nullable, strong) XLFormRowDescriptor * multivaluedRowTemplate;
|
||||
@property (nonatomic, readonly, nullable, strong) XLFormRowDescriptor * multivaluedAddButton;
|
||||
@property (nonatomic, nullable, copy) NSString * multivaluedTag;
|
||||
|
||||
@property (weak, null_unspecified) XLFormDescriptor * formDescriptor;
|
||||
@property (nonatomic, weak, null_unspecified) XLFormDescriptor * formDescriptor;
|
||||
|
||||
@property (nonnull) id hidden;
|
||||
@property (nonatomic, nonnull, strong) id hidden;
|
||||
-(BOOL)isHidden;
|
||||
|
||||
+(nonnull instancetype)formSection;
|
||||
+88
-64
@@ -29,15 +29,16 @@
|
||||
#import "NSString+XLFormAdditions.h"
|
||||
#import "UIView+XLFormAdditions.h"
|
||||
|
||||
NSString * const XLFormRowsKey = @"formRows";
|
||||
|
||||
@interface XLFormDescriptor (_XLFormSectionDescriptor)
|
||||
|
||||
@property (readonly) NSDictionary* allRowsByTag;
|
||||
@property (nonatomic, weak, readonly) NSDictionary *allRowsByTag;
|
||||
|
||||
-(void)addRowToTagCollection:(XLFormRowDescriptor*)rowDescriptor;
|
||||
-(void)removeRowFromTagCollection:(XLFormRowDescriptor*) rowDescriptor;
|
||||
-(void)showFormSection:(XLFormSectionDescriptor*)formSection;
|
||||
-(void)hideFormSection:(XLFormSectionDescriptor*)formSection;
|
||||
-(void)addRowToTagCollection:(XLFormRowDescriptor *)rowDescriptor;
|
||||
-(void)removeRowFromTagCollection:(XLFormRowDescriptor *) rowDescriptor;
|
||||
-(void)showFormSection:(XLFormSectionDescriptor *)formSection;
|
||||
-(void)hideFormSection:(XLFormSectionDescriptor *)formSection;
|
||||
|
||||
-(void)addObserversOfObject:(id)sectionOrRow predicateType:(XLPredicateType)predicateType;
|
||||
-(void)removeObserversOfObject:(id)sectionOrRow predicateType:(XLPredicateType)predicateType;
|
||||
@@ -46,10 +47,11 @@
|
||||
|
||||
@interface XLFormSectionDescriptor()
|
||||
|
||||
@property NSMutableArray * formRows;
|
||||
@property NSMutableArray * allRows;
|
||||
@property BOOL isDirtyHidePredicateCache;
|
||||
@property (nonatomic) NSNumber* hidePredicateCache;
|
||||
@property (nonatomic, strong) NSMutableArray *formRows;
|
||||
@property (nonatomic, strong) NSMutableArray *allRows;
|
||||
|
||||
@property (nonatomic, assign) BOOL isDirtyHidePredicateCache;
|
||||
@property (nonatomic, copy ) NSNumber *hidePredicateCache;
|
||||
|
||||
@end
|
||||
|
||||
@@ -60,8 +62,7 @@
|
||||
|
||||
-(instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self){
|
||||
if (self = [super init]) {
|
||||
_formRows = [NSMutableArray array];
|
||||
_allRows = [NSMutableArray array];
|
||||
_sectionInsertMode = XLFormSectionInsertModeLastRow;
|
||||
@@ -71,25 +72,35 @@
|
||||
_hidden = @NO;
|
||||
_hidePredicateCache = @NO;
|
||||
_isDirtyHidePredicateCache = YES;
|
||||
[self addObserver:self forKeyPath:@"formRows" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:0];
|
||||
|
||||
[self addObserver:self
|
||||
forKeyPath:XLFormRowsKey
|
||||
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:0];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
-(instancetype)initWithTitle:(NSString *)title sectionOptions:(XLFormSectionOptions)sectionOptions sectionInsertMode:(XLFormSectionInsertMode)sectionInsertMode{
|
||||
self = [self init];
|
||||
if (self){
|
||||
-(instancetype)initWithTitle:(NSString *)title sectionOptions:(XLFormSectionOptions)sectionOptions sectionInsertMode:(XLFormSectionInsertMode)sectionInsertMode
|
||||
{
|
||||
if (self = [self init]) {
|
||||
_sectionInsertMode = sectionInsertMode;
|
||||
_sectionOptions = sectionOptions;
|
||||
_title = title;
|
||||
if ([self canInsertUsingButton]){
|
||||
_multivaluedAddButton = [XLFormRowDescriptor formRowDescriptorWithTag:nil rowType:XLFormRowDescriptorTypeButton title:@"Add Item"];
|
||||
|
||||
if ([self canInsertUsingButton]) {
|
||||
_multivaluedAddButton = [XLFormRowDescriptor formRowDescriptorWithTag:nil
|
||||
rowType:XLFormRowDescriptorTypeButton
|
||||
title:@"Add Item"];
|
||||
|
||||
[_multivaluedAddButton.cellConfig setObject:@(NSTextAlignmentNatural) forKey:@"textLabel.textAlignment"];
|
||||
_multivaluedAddButton.action.formSelector = NSSelectorFromString(@"multivaluedInsertButtonTapped:");
|
||||
|
||||
[self insertObject:_multivaluedAddButton inFormRowsAtIndex:0];
|
||||
[self insertObject:_multivaluedAddButton inAllRowsAtIndex:0];
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -125,14 +136,12 @@
|
||||
|
||||
-(void)addFormRow:(XLFormRowDescriptor *)formRow
|
||||
{
|
||||
NSUInteger index;
|
||||
NSUInteger index = [self.allRows count];
|
||||
|
||||
if ([self canInsertUsingButton]) {
|
||||
index = ([self.formRows count] > 0) ? [self.formRows count] - 1 : 0;
|
||||
} else {
|
||||
index = [self.allRows count];
|
||||
}
|
||||
|
||||
|
||||
[self insertObject:formRow inAllRowsAtIndex:index];
|
||||
}
|
||||
|
||||
@@ -144,26 +153,23 @@
|
||||
}
|
||||
else { //case when afterRow does not exist. Just insert at the end.
|
||||
[self addFormRow:formRow];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)addFormRow:(XLFormRowDescriptor *)formRow beforeRow:(XLFormRowDescriptor *)beforeRow
|
||||
{
|
||||
|
||||
NSUInteger allRowIndex = [self.allRows indexOfObject:beforeRow];
|
||||
if (allRowIndex != NSNotFound) {
|
||||
[self insertObject:formRow inAllRowsAtIndex:allRowIndex];
|
||||
}
|
||||
else { //case when afterRow does not exist. Just insert at the end.
|
||||
[self addFormRow:formRow];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)removeFormRowAtIndex:(NSUInteger)index
|
||||
{
|
||||
if (self.formRows.count > index){
|
||||
if (self.formRows.count > index) {
|
||||
XLFormRowDescriptor *formRow = [self.formRows objectAtIndex:index];
|
||||
NSUInteger allRowIndex = [self.allRows indexOfObject:formRow];
|
||||
[self removeObjectFromFormRowsAtIndex:index];
|
||||
@@ -174,21 +180,21 @@
|
||||
-(void)removeFormRow:(XLFormRowDescriptor *)formRow
|
||||
{
|
||||
NSUInteger index = NSNotFound;
|
||||
if ((index = [self.formRows indexOfObject:formRow]) != NSNotFound){
|
||||
if ((index = [self.formRows indexOfObject:formRow]) != NSNotFound) {
|
||||
[self removeFormRowAtIndex:index];
|
||||
}
|
||||
else if ((index = [self.allRows indexOfObject:formRow]) != NSNotFound){
|
||||
if (self.allRows.count > index){
|
||||
else if ((index = [self.allRows indexOfObject:formRow]) != NSNotFound) {
|
||||
if (self.allRows.count > index) {
|
||||
[self removeObjectFromAllRowsAtIndex:index];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
- (void)moveRowAtIndexPath:(NSIndexPath *)sourceIndex toIndexPath:(NSIndexPath *)destinationIndex
|
||||
{
|
||||
if ((sourceIndex.row < self.formRows.count) && (destinationIndex.row < self.formRows.count) && (sourceIndex.row != destinationIndex.row)){
|
||||
XLFormRowDescriptor * row = [self objectInFormRowsAtIndex:sourceIndex.row];
|
||||
XLFormRowDescriptor * destRow = [self objectInFormRowsAtIndex:destinationIndex.row];
|
||||
if ((sourceIndex.row < self.formRows.count) && (destinationIndex.row < self.formRows.count) && (sourceIndex.row != destinationIndex.row)) {
|
||||
XLFormRowDescriptor *row = [self objectInFormRowsAtIndex:sourceIndex.row];
|
||||
XLFormRowDescriptor *destRow = [self objectInFormRowsAtIndex:destinationIndex.row];
|
||||
[self.formRows removeObjectAtIndex:sourceIndex.row];
|
||||
[self.formRows insertObject:row atIndex:destinationIndex.row];
|
||||
|
||||
@@ -199,11 +205,15 @@
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
[self removeObserver:self forKeyPath:XLFormRowsKey];
|
||||
|
||||
[self.formDescriptor removeObserversOfObject:self predicateType:XLPredicateTypeHidden];
|
||||
@try {
|
||||
[self removeObserver:self forKeyPath:@"formRows"];
|
||||
}
|
||||
@catch (NSException * __unused exception) {}
|
||||
|
||||
[self.formRows removeAllObjects];
|
||||
self.formRows = nil;
|
||||
|
||||
[self.allRows removeAllObjects];
|
||||
self.allRows = nil;
|
||||
}
|
||||
|
||||
#pragma mark - Show/hide rows
|
||||
@@ -214,13 +224,15 @@
|
||||
if (formIndex != NSNotFound) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSUInteger index = [self.allRows indexOfObject:formRow];
|
||||
if (index != NSNotFound){
|
||||
if (index != NSNotFound) {
|
||||
while (formIndex == NSNotFound && index > 0) {
|
||||
XLFormRowDescriptor* previous = [self.allRows objectAtIndex:--index];
|
||||
formIndex = [self.formRows indexOfObject:previous];
|
||||
}
|
||||
if (formIndex == NSNotFound){ // index == 0 => insert at the beginning
|
||||
|
||||
if (formIndex == NSNotFound) { // index == 0 => insert at the beginning
|
||||
[self insertObject:formRow inFormRowsAtIndex:0];
|
||||
}
|
||||
else {
|
||||
@@ -232,36 +244,41 @@
|
||||
|
||||
-(void)hideFormRow:(XLFormRowDescriptor*)formRow{
|
||||
NSUInteger index = [self.formRows indexOfObject:formRow];
|
||||
if (index != NSNotFound){
|
||||
if (index != NSNotFound) {
|
||||
[self removeObjectFromFormRowsAtIndex:index];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - KVO
|
||||
|
||||
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||
- (void)observeValueForKeyPath:(nullable NSString *)keyPath
|
||||
ofObject:(nullable id)object
|
||||
change:(nullable NSDictionary<NSKeyValueChangeKey, id> *)change
|
||||
context:(nullable void *)context
|
||||
{
|
||||
if (!self.formDescriptor.delegate) return;
|
||||
if ([keyPath isEqualToString:@"formRows"]){
|
||||
if ([self.formDescriptor.formSections containsObject:self]){
|
||||
if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeInsertion)]){
|
||||
NSIndexSet * indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormRowDescriptor * formRow = [((XLFormSectionDescriptor *)object).formRows objectAtIndex:indexSet.firstIndex];
|
||||
if (!self.formDescriptor.delegate) {
|
||||
return;
|
||||
}
|
||||
else if ([keyPath isEqualToString:XLFormRowsKey]) {
|
||||
if ([self.formDescriptor.formSections containsObject:self]) {
|
||||
if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeInsertion)]) {
|
||||
NSIndexSet *indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormRowDescriptor *formRow = [((XLFormSectionDescriptor *)object).formRows objectAtIndex:indexSet.firstIndex];
|
||||
NSUInteger sectionIndex = [self.formDescriptor.formSections indexOfObject:object];
|
||||
[self.formDescriptor.delegate formRowHasBeenAdded:formRow atIndexPath:[NSIndexPath indexPathForRow:indexSet.firstIndex inSection:sectionIndex]];
|
||||
[self.formDescriptor.delegate formRowHasBeenAdded:formRow
|
||||
atIndexPath:[NSIndexPath indexPathForRow:indexSet.firstIndex inSection:sectionIndex]];
|
||||
}
|
||||
else if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeRemoval)]){
|
||||
NSIndexSet * indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormRowDescriptor * removedRow = [[change objectForKey:NSKeyValueChangeOldKey] objectAtIndex:0];
|
||||
else if ([[change objectForKey:NSKeyValueChangeKindKey] isEqualToNumber:@(NSKeyValueChangeRemoval)]) {
|
||||
NSIndexSet *indexSet = [change objectForKey:NSKeyValueChangeIndexesKey];
|
||||
XLFormRowDescriptor *removedRow = [[change objectForKey:NSKeyValueChangeOldKey] objectAtIndex:0];
|
||||
NSUInteger sectionIndex = [self.formDescriptor.formSections indexOfObject:object];
|
||||
[self.formDescriptor.delegate formRowHasBeenRemoved:removedRow atIndexPath:[NSIndexPath indexPathForRow:indexSet.firstIndex inSection:sectionIndex]];
|
||||
[self.formDescriptor.delegate formRowHasBeenRemoved:removedRow
|
||||
atIndexPath:[NSIndexPath indexPathForRow:indexSet.firstIndex inSection:sectionIndex]];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark - KVC
|
||||
|
||||
-(NSUInteger)countOfFormRows
|
||||
@@ -342,9 +359,9 @@
|
||||
|
||||
-(void)setHidePredicateCache:(NSNumber *)hidePredicateCache
|
||||
{
|
||||
NSParameterAssert(hidePredicateCache);
|
||||
NSParameterAssert(hidePredicateCache != nil);
|
||||
self.isDirtyHidePredicateCache = NO;
|
||||
if (!_hidePredicateCache || ![_hidePredicateCache isEqualToNumber:hidePredicateCache]){
|
||||
if (_hidePredicateCache == nil || ![_hidePredicateCache isEqualToNumber:hidePredicateCache]) {
|
||||
_hidePredicateCache = hidePredicateCache;
|
||||
}
|
||||
}
|
||||
@@ -354,6 +371,7 @@
|
||||
if (self.isDirtyHidePredicateCache) {
|
||||
return [self evaluateIsHidden];
|
||||
}
|
||||
|
||||
return [self.hidePredicateCache boolValue];
|
||||
}
|
||||
|
||||
@@ -362,7 +380,8 @@
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]) {
|
||||
if (!self.formDescriptor) {
|
||||
self.isDirtyHidePredicateCache = YES;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
@try {
|
||||
self.hidePredicateCache = @([_hidden evaluateWithObject:self substitutionVariables:self.formDescriptor.allRowsByTag ?: @{}]);
|
||||
}
|
||||
@@ -372,21 +391,24 @@
|
||||
};
|
||||
}
|
||||
}
|
||||
else{
|
||||
else {
|
||||
self.hidePredicateCache = _hidden;
|
||||
}
|
||||
if ([self.hidePredicateCache boolValue]){
|
||||
if ([self.formDescriptor.delegate isKindOfClass:[XLFormViewController class]]){
|
||||
XLFormBaseCell* firtResponder = (XLFormBaseCell*) [((XLFormViewController*)self.formDescriptor.delegate).tableView findFirstResponder];
|
||||
if ([firtResponder isKindOfClass:[XLFormBaseCell class]] && firtResponder.rowDescriptor.sectionDescriptor == self){
|
||||
|
||||
if ([self.hidePredicateCache boolValue]) {
|
||||
if ([self.formDescriptor.delegate isKindOfClass:[XLFormViewController class]]) {
|
||||
XLFormBaseCell *firtResponder = (XLFormBaseCell *)[((XLFormViewController *)self.formDescriptor.delegate).tableView findFirstResponder];
|
||||
if ([firtResponder isKindOfClass:[XLFormBaseCell class]] && firtResponder.rowDescriptor.sectionDescriptor == self) {
|
||||
[firtResponder resignFirstResponder];
|
||||
}
|
||||
}
|
||||
|
||||
[self.formDescriptor hideFormSection:self];
|
||||
}
|
||||
else{
|
||||
else {
|
||||
[self.formDescriptor showFormSection:self];
|
||||
}
|
||||
|
||||
return [self.hidePredicateCache boolValue];
|
||||
}
|
||||
|
||||
@@ -398,13 +420,15 @@
|
||||
|
||||
-(void)setHidden:(id)hidden
|
||||
{
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]){
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]) {
|
||||
[self.formDescriptor removeObserversOfObject:self predicateType:XLPredicateTypeHidden];
|
||||
}
|
||||
|
||||
_hidden = [hidden isKindOfClass:[NSString class]] ? [hidden formPredicate] : hidden;
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]){
|
||||
if ([_hidden isKindOfClass:[NSPredicate class]]) {
|
||||
[self.formDescriptor addObserversOfObject:self predicateType:XLPredicateTypeHidden];
|
||||
}
|
||||
|
||||
[self evaluateIsHidden]; // check and update if this row should be hidden.
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
@interface XLFormSegmentedCell()
|
||||
|
||||
@property NSMutableArray * dynamicCustomConstraints;
|
||||
@property (nonatomic, strong) NSMutableArray * dynamicCustomConstraints;
|
||||
|
||||
@end
|
||||
|
||||
@@ -168,6 +168,9 @@
|
||||
-(void)dealloc
|
||||
{
|
||||
[self.textLabel removeObserver:self forKeyPath:@"text"];
|
||||
|
||||
[self.dynamicCustomConstraints removeAllObjects];
|
||||
self.dynamicCustomConstraints = nil;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -31,10 +31,10 @@ extern NSString *const XLFormTextFieldMaxNumberOfCharacters;
|
||||
|
||||
@interface XLFormTextFieldCell : XLFormBaseCell <XLFormReturnKeyProtocol>
|
||||
|
||||
@property (nonatomic, readonly) UILabel * textLabel;
|
||||
@property (nonatomic, readonly) UITextField * textField;
|
||||
@property (nonatomic, readonly, weak) UILabel * textLabel;
|
||||
@property (nonatomic, readonly, weak) UITextField * textField;
|
||||
|
||||
@property (nonatomic) NSNumber *textFieldLengthPercentage;
|
||||
@property (nonatomic) NSNumber *textFieldMaxNumberOfCharacters;
|
||||
@property (nonatomic, copy) NSNumber *textFieldLengthPercentage;
|
||||
@property (nonatomic, copy) NSNumber *textFieldMaxNumberOfCharacters;
|
||||
|
||||
@end
|
||||
Regular → Executable
+46
-25
@@ -34,7 +34,7 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
|
||||
@interface XLFormTextFieldCell() <UITextFieldDelegate>
|
||||
|
||||
@property NSMutableArray * dynamicCustomConstraints;
|
||||
@property (nonatomic, strong) NSMutableArray * dynamicCustomConstraints;
|
||||
|
||||
@end
|
||||
|
||||
@@ -69,8 +69,14 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
[self.textField removeTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
|
||||
[self.textLabel removeObserver:self forKeyPath:@"text"];
|
||||
[self.imageView removeObserver:self forKeyPath:@"image"];
|
||||
|
||||
self.textField.delegate = nil;
|
||||
|
||||
[self.dynamicCustomConstraints removeAllObjects];
|
||||
self.dynamicCustomConstraints = nil;
|
||||
}
|
||||
|
||||
#pragma mark - XLFormDescriptorCell
|
||||
@@ -79,8 +85,14 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
{
|
||||
[super configure];
|
||||
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
|
||||
[self.contentView addSubview:self.textLabel];
|
||||
[self.contentView addSubview:self.textField];
|
||||
UILabel *textLabel = [UILabel autolayoutView];
|
||||
[self.contentView addSubview:textLabel];
|
||||
_textLabel = textLabel;
|
||||
|
||||
UITextField *textField = [UITextField autolayoutView];
|
||||
[self.contentView addSubview:textField];
|
||||
_textField = textField;
|
||||
|
||||
[self.contentView addConstraints:[self layoutConstraints]];
|
||||
[self.textLabel addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
[self.imageView addObserver:self forKeyPath:@"image" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:0];
|
||||
@@ -150,8 +162,33 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
|
||||
self.textField.text = self.rowDescriptor.value ? [self.rowDescriptor displayTextValue] : self.rowDescriptor.noValueDisplayText;
|
||||
[self.textField setEnabled:!self.rowDescriptor.isDisabled];
|
||||
self.textField.textColor = self.rowDescriptor.isDisabled ? [UIColor grayColor] : [UIColor blackColor];
|
||||
self.textField.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
|
||||
|
||||
UIColor * textColor = nil;
|
||||
UIColor * disabledTextColor = nil;
|
||||
|
||||
if (@available(iOS 13.0, *)) {
|
||||
textColor = [self traitCollection].userInterfaceStyle == UIUserInterfaceStyleDark ? [UIColor systemGrayColor] : [UIColor blackColor];
|
||||
disabledTextColor = [UIColor systemGray3Color];
|
||||
}
|
||||
|
||||
else if (@available(iOS 12.0, *)) {
|
||||
textColor = [self traitCollection].userInterfaceStyle == UIUserInterfaceStyleDark ? [UIColor lightTextColor] : [UIColor darkTextColor];
|
||||
disabledTextColor = [UIColor systemGrayColor];
|
||||
}
|
||||
|
||||
else {
|
||||
textColor = [UIColor blackColor];
|
||||
disabledTextColor = [UIColor grayColor];
|
||||
}
|
||||
|
||||
|
||||
if (self.rowDescriptor.isDisabled) {
|
||||
self.textField.textColor = disabledTextColor;
|
||||
}
|
||||
else {
|
||||
self.textField.textColor = textColor;
|
||||
}
|
||||
}
|
||||
|
||||
-(BOOL)formDescriptorCellCanBecomeFirstResponder
|
||||
@@ -176,22 +213,6 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
[self.formViewController updateFormRow:self.rowDescriptor];
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
-(UILabel *)textLabel
|
||||
{
|
||||
if (_textLabel) return _textLabel;
|
||||
_textLabel = [UILabel autolayoutView];
|
||||
return _textLabel;
|
||||
}
|
||||
|
||||
-(UITextField *)textField
|
||||
{
|
||||
if (_textField) return _textField;
|
||||
_textField = [UITextField autolayoutView];
|
||||
return _textField;
|
||||
}
|
||||
|
||||
#pragma mark - LayoutConstraints
|
||||
|
||||
-(NSArray *)layoutConstraints
|
||||
@@ -225,10 +246,10 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
self.dynamicCustomConstraints = [NSMutableArray arrayWithArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[image]-[label]-[textField]-|" options:0 metrics:nil views:views]];
|
||||
[self.dynamicCustomConstraints addObject:[NSLayoutConstraint constraintWithItem:_textField
|
||||
attribute:NSLayoutAttributeWidth
|
||||
relatedBy:self.textFieldLengthPercentage ? NSLayoutRelationEqual : NSLayoutRelationGreaterThanOrEqual
|
||||
relatedBy:self.textFieldLengthPercentage != nil ? NSLayoutRelationEqual : NSLayoutRelationGreaterThanOrEqual
|
||||
toItem:self.contentView
|
||||
attribute:NSLayoutAttributeWidth
|
||||
multiplier:self.textFieldLengthPercentage ? [self.textFieldLengthPercentage floatValue] : 0.3
|
||||
multiplier:self.textFieldLengthPercentage != nil ? [self.textFieldLengthPercentage floatValue] : 0.3
|
||||
constant:0.0]];
|
||||
}
|
||||
else{
|
||||
@@ -240,10 +261,10 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
self.dynamicCustomConstraints = [NSMutableArray arrayWithArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label]-[textField]-|" options:0 metrics:nil views:views]];
|
||||
[self.dynamicCustomConstraints addObject:[NSLayoutConstraint constraintWithItem:_textField
|
||||
attribute:NSLayoutAttributeWidth
|
||||
relatedBy:self.textFieldLengthPercentage ? NSLayoutRelationEqual : NSLayoutRelationGreaterThanOrEqual
|
||||
relatedBy:self.textFieldLengthPercentage != nil ? NSLayoutRelationEqual : NSLayoutRelationGreaterThanOrEqual
|
||||
toItem:self.contentView
|
||||
attribute:NSLayoutAttributeWidth
|
||||
multiplier:self.textFieldLengthPercentage ? [self.textFieldLengthPercentage floatValue] : 0.3
|
||||
multiplier:self.textFieldLengthPercentage != nil ? [self.textFieldLengthPercentage floatValue] : 0.3
|
||||
constant:0.0]];
|
||||
}
|
||||
else{
|
||||
@@ -279,7 +300,7 @@ NSString *const XLFormTextFieldMaxNumberOfCharacters = @"textFieldMaxNumberOfCha
|
||||
}
|
||||
|
||||
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
|
||||
if (self.textFieldMaxNumberOfCharacters) {
|
||||
if (self.textFieldMaxNumberOfCharacters != nil) {
|
||||
// Check maximum length requirement
|
||||
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
|
||||
if (newString.length > self.textFieldMaxNumberOfCharacters.integerValue) {
|
||||
@@ -29,9 +29,9 @@
|
||||
@interface XLFormTextView : UITextView
|
||||
|
||||
|
||||
@property (nonatomic) NSString *placeholder;
|
||||
@property (nonatomic) UIColor *placeholderColor;
|
||||
@property (nonatomic, copy) NSString *placeholder;
|
||||
@property (nonatomic, copy) UIColor *placeholderColor;
|
||||
|
||||
@property (readonly) UILabel *placeHolderLabel;
|
||||
@property (nonatomic, readonly, weak) UILabel *placeHolderLabel;
|
||||
|
||||
@end
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:nil];
|
||||
}
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
@@ -67,17 +67,19 @@
|
||||
{
|
||||
if([[self placeholder] length] > 0){
|
||||
if (_placeHolderLabel == nil ){
|
||||
_placeHolderLabel = [[UILabel alloc] initWithFrame:CGRectMake(4,8,self.bounds.size.width - 16,0)];
|
||||
_placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping;
|
||||
_placeHolderLabel.numberOfLines = 0;
|
||||
_placeHolderLabel.backgroundColor = [UIColor clearColor];
|
||||
_placeHolderLabel.textColor = self.placeholderColor;
|
||||
_placeHolderLabel.alpha = 0;
|
||||
_placeHolderLabel.tag = 999;
|
||||
[self addSubview:_placeHolderLabel];
|
||||
UILabel *placeHolderLabel = [[UILabel alloc] initWithFrame:CGRectMake(4,8,self.bounds.size.width - 16,0)];
|
||||
placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping;
|
||||
placeHolderLabel.numberOfLines = 0;
|
||||
placeHolderLabel.backgroundColor = [UIColor clearColor];
|
||||
placeHolderLabel.textColor = self.placeholderColor;
|
||||
placeHolderLabel.alpha = 0;
|
||||
placeHolderLabel.tag = 999;
|
||||
[self addSubview:placeHolderLabel];
|
||||
_placeHolderLabel = placeHolderLabel;
|
||||
}
|
||||
_placeHolderLabel.text = self.placeholder;
|
||||
_placeHolderLabel.font = self.font;
|
||||
_placeHolderLabel.textColor = self.placeholderColor;
|
||||
[_placeHolderLabel sizeToFit];
|
||||
[self sendSubviewToBack:_placeHolderLabel];
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user