├── .gitignore
├── AutocompletionTableView_Demo
├── en.lproj
│ ├── InfoPlist.strings
│ └── MainStoryboard.storyboard
├── ACDAppDelegate.h
├── ACDViewController.h
├── AutocompletionTableView_Demo-Prefix.pch
├── main.m
├── AutocompletionTableView_Demo-Info.plist
├── ACDAppDelegate.m
└── ACDViewController.m
├── AutocompletionTableView_Demo.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
├── README
├── LICENSE
└── Classes
├── AutocompletionTableView.h
└── AutocompletionTableView.m
/.gitignore:
--------------------------------------------------------------------------------
1 | xcuserdata
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/ACDAppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // ACDAppDelegate.h
3 | // AutocompletionTableView_Demo
4 | //
5 | // Created by Gushin Arseniy on 13.03.12.
6 | // Copyright (c) 2012 Arseniy Gushin. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ACDAppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/ACDViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ACDViewController.h
3 | // AutocompletionTableView_Demo
4 | //
5 | // Created by Gushin Arseniy on 13.03.12.
6 | // Copyright (c) 2012 Arseniy Gushin. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol AutocompletionTableViewDelegate;
12 |
13 | @interface ACDViewController : UIViewController
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/AutocompletionTableView_Demo-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'AutocompletionTableView_Demo' target in the 'AutocompletionTableView_Demo' project
3 | //
4 |
5 | #import
6 |
7 | #ifndef __IPHONE_5_0
8 | #warning "This project uses features only available in iOS SDK 5.0 and later."
9 | #endif
10 |
11 | #ifdef __OBJC__
12 | #import
13 | #import
14 | #endif
15 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // AutocompletionTableView_Demo
4 | //
5 | // Created by Gushin Arseniy on 13.03.12.
6 | // Copyright (c) 2012 Arseniy Gushin. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "ACDAppDelegate.h"
12 |
13 | int main(int argc, char *argv[])
14 | {
15 | @autoreleasepool {
16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([ACDAppDelegate class]));
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/README:
--------------------------------------------------------------------------------
1 | AutocompletionTableView
2 |
3 | It's a very simple UITableView subclass which let's you to add real-time suggestion list for UITextView based on the custom dictionary.
4 |
5 | Step 1: init an instance of AutocompletionTableView with "initWithTextField:inViewController:withOptions:".
6 | Step 2: set its dictionary of suggestion strings
7 | Step 3: set it as the target for UIControlEventEditingChanged event for your UITextField:
8 | [YOUR_textField addTarget:YOUR_INSTANCE_of_AutocompletionTableView action:@selector(textFieldValueChanged:) forControlEvents:UIControlEventEditingChanged];
9 | Step 4: Enjoy! ;)
10 | Step 5: let me know what do you think at http://cocoacontrols.com/platforms/ios/controls/autocompletiontableview
11 |
12 | -
13 | Arseniy
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2012, Arseniy Gushin
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5 |
6 | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7 | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/AutocompletionTableView_Demo-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
9 | CFBundleExecutable
10 | ${EXECUTABLE_NAME}
11 | CFBundleIdentifier
12 | local.home.${PRODUCT_NAME:rfc1034identifier}
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | ${PRODUCT_NAME}
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1.0
25 | LSRequiresIPhoneOS
26 |
27 | UIMainStoryboardFile
28 | MainStoryboard
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/ACDAppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // ACDAppDelegate.m
3 | // AutocompletionTableView_Demo
4 | //
5 | // Created by Gushin Arseniy on 13.03.12.
6 | // Copyright (c) 2012 Arseniy Gushin. All rights reserved.
7 | //
8 |
9 | #import "ACDAppDelegate.h"
10 |
11 | @implementation ACDAppDelegate
12 |
13 | @synthesize window = _window;
14 |
15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
16 | {
17 | // Override point for customization after application launch.
18 | return YES;
19 | }
20 |
21 | - (void)applicationWillResignActive:(UIApplication *)application
22 | {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
25 | }
26 |
27 | - (void)applicationDidEnterBackground:(UIApplication *)application
28 | {
29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
31 | }
32 |
33 | - (void)applicationWillEnterForeground:(UIApplication *)application
34 | {
35 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
36 | }
37 |
38 | - (void)applicationDidBecomeActive:(UIApplication *)application
39 | {
40 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
41 | }
42 |
43 | - (void)applicationWillTerminate:(UIApplication *)application
44 | {
45 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
46 | }
47 |
48 | @end
49 |
--------------------------------------------------------------------------------
/Classes/AutocompletionTableView.h:
--------------------------------------------------------------------------------
1 | //
2 | // AutocompletionTableView.h
3 | //
4 | // Created by Gushin Arseniy on 11.03.12.
5 | // Copyright (c) 2012 Arseniy Gushin. All rights reserved.
6 | //
7 |
8 | #import
9 |
10 | // Consts for AutoCompleteOptions:
11 | //
12 | // if YES - suggestions will be picked for display case-sensitive
13 | // if NO - case will be ignored
14 | #define ACOCaseSensitive @"ACOCaseSensitive"
15 |
16 | // if "nil" each cell will copy the font of the source UITextField
17 | // if not "nil" given UIFont will be used
18 | #define ACOUseSourceFont @"ACOUseSourceFont"
19 |
20 | // if YES substrings in cells will be highlighted with bold as user types in
21 | // *** FOR FUTURE USE ***
22 | #define ACOHighlightSubstrWithBold @"ACOHighlightSubstrWithBold"
23 |
24 | // if YES - suggestions view will be on top of the source UITextField
25 | // if NO - it will be on the bottom
26 | // *** FOR FUTURE USE ***
27 | #define ACOShowSuggestionsOnTop @"ACOShowSuggestionsOnTop"
28 |
29 | @class AutocompletionTableView;
30 |
31 | /**
32 | @protocol Delegate methods for AutocompletionTableView
33 | */
34 | @protocol AutocompletionTableViewDelegate
35 |
36 | @required
37 | /**
38 | @method Ask delegate for the suggestions for the provided string - maybe need to ask DB, service, etc.
39 | @param string the "to-search" term
40 | @return an array of suggestions built dynamically
41 | */
42 | - (NSArray*) autoCompletion:(AutocompletionTableView*) completer suggestionsFor:(NSString*) string;
43 |
44 | /**
45 | @method Invoked when user clicked an auto-complete suggestion UITableViewCell.
46 | @param index the index that was cicked
47 | */
48 | - (void) autoCompletion:(AutocompletionTableView*) completer didSelectAutoCompleteSuggestionWithIndex:(NSInteger) index;
49 |
50 | @end
51 |
52 | @interface AutocompletionTableView : UITableView
53 | // Dictionary of NSStrings of your auto-completion terms
54 | @property (nonatomic, strong) NSArray *suggestionsDictionary;
55 |
56 | // Delegate for AutocompletionTableView
57 | @property (nonatomic, strong) id autoCompleteDelegate;
58 | // Dictionary of auto-completion options (check constants above)
59 | @property (nonatomic, strong) NSDictionary *options;
60 |
61 | // Call it for proper initialization
62 | - (UITableView *)initWithTextField:(UITextField *)textField inViewController:(UIViewController *) parentViewController withOptions:(NSDictionary *)options;
63 | @end
64 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/ACDViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ACDViewController.m
3 | // AutocompletionTableView_Demo
4 | //
5 | // Created by Gushin Arseniy on 13.03.12.
6 | // Copyright (c) 2012 Arseniy Gushin. All rights reserved.
7 | //
8 |
9 | #import "ACDViewController.h"
10 | #import "AutocompletionTableView.h"
11 |
12 | @interface ACDViewController ()
13 | @property (nonatomic, strong) AutocompletionTableView *autoCompleter;
14 | @property (weak, nonatomic) IBOutlet UITextField *textField;
15 | @property (weak, nonatomic) IBOutlet UILabel *sampleLabel;
16 |
17 | @end
18 |
19 | @implementation ACDViewController
20 |
21 | @synthesize textField = _textField;
22 | @synthesize sampleLabel = _sampleLabel;
23 | @synthesize autoCompleter = _autoCompleter;
24 |
25 | - (AutocompletionTableView *)autoCompleter
26 | {
27 | if (!_autoCompleter)
28 | {
29 | NSMutableDictionary *options = [NSMutableDictionary dictionaryWithCapacity:2];
30 | [options setValue:[NSNumber numberWithBool:YES] forKey:ACOCaseSensitive];
31 | [options setValue:nil forKey:ACOUseSourceFont];
32 |
33 | _autoCompleter = [[AutocompletionTableView alloc] initWithTextField:self.textField inViewController:self withOptions:options];
34 | _autoCompleter.autoCompleteDelegate = self;
35 | _autoCompleter.suggestionsDictionary = [NSArray arrayWithObjects:@"hostel",@"caret",@"carrot",@"house",@"horse", nil];
36 | }
37 | return _autoCompleter;
38 | }
39 |
40 | - (void)viewDidLoad
41 | {
42 | [super viewDidLoad];
43 | // set "value changed" event handler for TextField
44 | [self.textField addTarget:self.autoCompleter action:@selector(textFieldValueChanged:) forControlEvents:UIControlEventEditingChanged];
45 | }
46 |
47 | - (IBAction)caseSwitchChanged:(UISwitch *)sender
48 | {
49 | NSMutableDictionary *options = [self.autoCompleter.options mutableCopy];
50 | [options setValue:[NSNumber numberWithBool:sender.on] forKey:ACOCaseSensitive];
51 | self.autoCompleter.options = options;
52 | }
53 |
54 | - (IBAction)fontSwitchChanged:(UISwitch *)sender
55 | {
56 | NSMutableDictionary *options = [self.autoCompleter.options mutableCopy];
57 | UIFont *cellLabelFont = (sender.on) ? nil : self.sampleLabel.font;
58 | [options setValue:cellLabelFont forKey:ACOUseSourceFont];
59 | self.autoCompleter.options = options;
60 | }
61 |
62 | - (void)viewDidUnload {
63 | [self setSampleLabel:nil];
64 | [self setSampleLabel:nil];
65 | [super viewDidUnload];
66 | }
67 |
68 | #pragma mark - AutoCompleteTableViewDelegate
69 |
70 | - (NSArray*) autoCompletion:(AutocompletionTableView*) completer suggestionsFor:(NSString*) string{
71 | // with the prodided string, build a new array with suggestions - from DB, from a service, etc.
72 | return [NSArray arrayWithObjects:@"hostel",@"caret",@"carrot",@"house",@"horse", nil];
73 | }
74 |
75 | - (void) autoCompletion:(AutocompletionTableView*) completer didSelectAutoCompleteSuggestionWithIndex:(NSInteger) index{
76 | // invoked when an available suggestion is selected
77 | NSLog(@"%@ - Suggestion chosen: %d", completer, index);
78 | }
79 |
80 | @end
81 |
--------------------------------------------------------------------------------
/Classes/AutocompletionTableView.m:
--------------------------------------------------------------------------------
1 | //
2 | // AutocompletionTableView.m
3 | //
4 | // Created by Gushin Arseniy on 11.03.12.
5 | // Copyright (c) 2012 Arseniy Gushin. All rights reserved.
6 | //
7 |
8 | #import "AutocompletionTableView.h"
9 |
10 | @interface AutocompletionTableView ()
11 | @property (nonatomic, strong) NSArray *suggestionOptions; // of selected NSStrings
12 | @property (nonatomic, strong) UITextField *textField; // will set automatically as user enters text
13 | @property (nonatomic, strong) UIFont *cellLabelFont; // will copy style from assigned textfield
14 | @end
15 |
16 | @implementation AutocompletionTableView
17 |
18 | @synthesize suggestionsDictionary = _suggestionsDictionary;
19 | @synthesize suggestionOptions = _suggestionOptions;
20 | @synthesize textField = _textField;
21 | @synthesize cellLabelFont = _cellLabelFont;
22 | @synthesize options = _options;
23 |
24 | #pragma mark - Initialization
25 | - (UITableView *)initWithTextField:(UITextField *)textField inViewController:(UIViewController *) parentViewController withOptions:(NSDictionary *)options
26 | {
27 | //set the options first
28 | self.options = options;
29 |
30 | // frame must align to the textfield
31 | CGRect frame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y+textField.frame.size.height, textField.frame.size.width, 120);
32 |
33 | // save the font info to reuse in cells
34 | self.cellLabelFont = textField.font;
35 |
36 | self = [super initWithFrame:frame
37 | style:UITableViewStylePlain];
38 |
39 | self.delegate = self;
40 | self.dataSource = self;
41 | self.scrollEnabled = YES;
42 |
43 | // turn off standard correction
44 | textField.autocorrectionType = UITextAutocorrectionTypeNo;
45 |
46 | // to get rid of "extra empty cell" on the bottom
47 | // when there's only one cell in the table
48 | UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, textField.frame.size.width, 1)];
49 | v.backgroundColor = [UIColor clearColor];
50 | [self setTableFooterView:v];
51 | self.hidden = YES;
52 | [parentViewController.view addSubview:self];
53 |
54 | return self;
55 | }
56 |
57 | #pragma mark - Logic staff
58 | - (BOOL) substringIsInDictionary:(NSString *)subString
59 | {
60 | NSMutableArray *tmpArray = [NSMutableArray array];
61 | NSRange range;
62 |
63 | if (_autoCompleteDelegate && [_autoCompleteDelegate respondsToSelector:@selector(autoCompletion:suggestionsFor:)]) {
64 | self.suggestionsDictionary = [_autoCompleteDelegate autoCompletion:self suggestionsFor:subString];
65 | }
66 |
67 | for (NSString *tmpString in self.suggestionsDictionary)
68 | {
69 | range = ([[self.options valueForKey:ACOCaseSensitive] isEqualToNumber:[NSNumber numberWithInt:1]]) ? [tmpString rangeOfString:subString] : [tmpString rangeOfString:subString options:NSCaseInsensitiveSearch];
70 | if (range.location != NSNotFound) [tmpArray addObject:tmpString];
71 | }
72 | if ([tmpArray count]>0)
73 | {
74 | self.suggestionOptions = tmpArray;
75 | return YES;
76 | }
77 | return NO;
78 | }
79 |
80 | #pragma mark - Table view data source
81 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
82 | {
83 | return self.suggestionOptions.count;
84 | }
85 |
86 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
87 | {
88 | NSString *AutoCompleteRowIdentifier = @"AutoCompleteRowIdentifier";
89 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:AutoCompleteRowIdentifier];
90 | if (cell == nil)
91 | {
92 | cell = [[UITableViewCell alloc]
93 | initWithStyle:UITableViewCellStyleDefault reuseIdentifier:AutoCompleteRowIdentifier];
94 | }
95 |
96 | if ([self.options valueForKey:ACOUseSourceFont])
97 | {
98 | cell.textLabel.font = [self.options valueForKey:ACOUseSourceFont];
99 | } else
100 | {
101 | cell.textLabel.font = self.cellLabelFont;
102 | }
103 | cell.textLabel.adjustsFontSizeToFitWidth = NO;
104 | cell.textLabel.text = [self.suggestionOptions objectAtIndex:indexPath.row];
105 |
106 | return cell;
107 | }
108 |
109 | #pragma mark - Table view delegate
110 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
111 | {
112 | [self.textField setText:[self.suggestionOptions objectAtIndex:indexPath.row]];
113 |
114 | if (_autoCompleteDelegate && [_autoCompleteDelegate respondsToSelector:@selector(autoCompletion:didSelectAutoCompleteSuggestionWithIndex:)]) {
115 | [_autoCompleteDelegate autoCompletion:self didSelectAutoCompleteSuggestionWithIndex:indexPath.row];
116 | }
117 |
118 | [self hideOptionsView];
119 | }
120 |
121 | #pragma mark - UITextField delegate
122 | - (void)textFieldValueChanged:(UITextField *)textField
123 | {
124 | self.textField = textField;
125 | NSString *curString = textField.text;
126 |
127 | if (![curString length])
128 | {
129 | [self hideOptionsView];
130 | return;
131 | } else if ([self substringIsInDictionary:curString])
132 | {
133 | [self showOptionsView];
134 | [self reloadData];
135 | } else [self hideOptionsView];
136 | }
137 |
138 | #pragma mark - Options view control
139 | - (void)showOptionsView
140 | {
141 | self.hidden = NO;
142 | }
143 |
144 | - (void) hideOptionsView
145 | {
146 | self.hidden = YES;
147 | }
148 |
149 | @end
150 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo/en.lproj/MainStoryboard.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
31 |
38 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/AutocompletionTableView_Demo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | AE081A29150E978600FCE491 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE081A28150E978600FCE491 /* UIKit.framework */; };
11 | AE081A2B150E978600FCE491 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE081A2A150E978600FCE491 /* Foundation.framework */; };
12 | AE081A2D150E978600FCE491 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE081A2C150E978600FCE491 /* CoreGraphics.framework */; };
13 | AE081A33150E978600FCE491 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AE081A31150E978600FCE491 /* InfoPlist.strings */; };
14 | AE081A35150E978600FCE491 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AE081A34150E978600FCE491 /* main.m */; };
15 | AE081A39150E978600FCE491 /* ACDAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AE081A38150E978600FCE491 /* ACDAppDelegate.m */; };
16 | AE081A3C150E978600FCE491 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE081A3A150E978600FCE491 /* MainStoryboard.storyboard */; };
17 | AE081A3F150E978600FCE491 /* ACDViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AE081A3E150E978600FCE491 /* ACDViewController.m */; };
18 | AE081A4F150EA46500FCE491 /* AutocompletionTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = AE081A4E150EA46500FCE491 /* AutocompletionTableView.m */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXFileReference section */
22 | AE081A24150E978600FCE491 /* AutocompletionTableView_Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutocompletionTableView_Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
23 | AE081A28150E978600FCE491 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
24 | AE081A2A150E978600FCE491 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
25 | AE081A2C150E978600FCE491 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
26 | AE081A30150E978600FCE491 /* AutocompletionTableView_Demo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "AutocompletionTableView_Demo-Info.plist"; sourceTree = ""; };
27 | AE081A32150E978600FCE491 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
28 | AE081A34150E978600FCE491 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
29 | AE081A36150E978600FCE491 /* AutocompletionTableView_Demo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AutocompletionTableView_Demo-Prefix.pch"; sourceTree = ""; };
30 | AE081A37150E978600FCE491 /* ACDAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ACDAppDelegate.h; sourceTree = ""; };
31 | AE081A38150E978600FCE491 /* ACDAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ACDAppDelegate.m; sourceTree = ""; };
32 | AE081A3B150E978600FCE491 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = ""; };
33 | AE081A3D150E978600FCE491 /* ACDViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ACDViewController.h; sourceTree = ""; };
34 | AE081A3E150E978600FCE491 /* ACDViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ACDViewController.m; sourceTree = ""; };
35 | AE081A4E150EA46500FCE491 /* AutocompletionTableView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AutocompletionTableView.m; path = ../Classes/AutocompletionTableView.m; sourceTree = ""; };
36 | AE081A50150EA4B400FCE491 /* AutocompletionTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AutocompletionTableView.h; path = Classes/AutocompletionTableView.h; sourceTree = SOURCE_ROOT; };
37 | /* End PBXFileReference section */
38 |
39 | /* Begin PBXFrameworksBuildPhase section */
40 | AE081A21150E978600FCE491 /* Frameworks */ = {
41 | isa = PBXFrameworksBuildPhase;
42 | buildActionMask = 2147483647;
43 | files = (
44 | AE081A29150E978600FCE491 /* UIKit.framework in Frameworks */,
45 | AE081A2B150E978600FCE491 /* Foundation.framework in Frameworks */,
46 | AE081A2D150E978600FCE491 /* CoreGraphics.framework in Frameworks */,
47 | );
48 | runOnlyForDeploymentPostprocessing = 0;
49 | };
50 | /* End PBXFrameworksBuildPhase section */
51 |
52 | /* Begin PBXGroup section */
53 | AE081A19150E978600FCE491 = {
54 | isa = PBXGroup;
55 | children = (
56 | AE081A2E150E978600FCE491 /* AutocompletionTableView_Demo */,
57 | AE081A27150E978600FCE491 /* Frameworks */,
58 | AE081A25150E978600FCE491 /* Products */,
59 | );
60 | sourceTree = "";
61 | };
62 | AE081A25150E978600FCE491 /* Products */ = {
63 | isa = PBXGroup;
64 | children = (
65 | AE081A24150E978600FCE491 /* AutocompletionTableView_Demo.app */,
66 | );
67 | name = Products;
68 | sourceTree = "";
69 | };
70 | AE081A27150E978600FCE491 /* Frameworks */ = {
71 | isa = PBXGroup;
72 | children = (
73 | AE081A28150E978600FCE491 /* UIKit.framework */,
74 | AE081A2A150E978600FCE491 /* Foundation.framework */,
75 | AE081A2C150E978600FCE491 /* CoreGraphics.framework */,
76 | );
77 | name = Frameworks;
78 | sourceTree = "";
79 | };
80 | AE081A2E150E978600FCE491 /* AutocompletionTableView_Demo */ = {
81 | isa = PBXGroup;
82 | children = (
83 | AE081A48150E97C300FCE491 /* Classes */,
84 | AE081A3A150E978600FCE491 /* MainStoryboard.storyboard */,
85 | AE081A3D150E978600FCE491 /* ACDViewController.h */,
86 | AE081A3E150E978600FCE491 /* ACDViewController.m */,
87 | AE081A2F150E978600FCE491 /* Supporting Files */,
88 | );
89 | path = AutocompletionTableView_Demo;
90 | sourceTree = "";
91 | };
92 | AE081A2F150E978600FCE491 /* Supporting Files */ = {
93 | isa = PBXGroup;
94 | children = (
95 | AE081A37150E978600FCE491 /* ACDAppDelegate.h */,
96 | AE081A38150E978600FCE491 /* ACDAppDelegate.m */,
97 | AE081A30150E978600FCE491 /* AutocompletionTableView_Demo-Info.plist */,
98 | AE081A31150E978600FCE491 /* InfoPlist.strings */,
99 | AE081A34150E978600FCE491 /* main.m */,
100 | AE081A36150E978600FCE491 /* AutocompletionTableView_Demo-Prefix.pch */,
101 | );
102 | name = "Supporting Files";
103 | sourceTree = "";
104 | };
105 | AE081A48150E97C300FCE491 /* Classes */ = {
106 | isa = PBXGroup;
107 | children = (
108 | AE081A50150EA4B400FCE491 /* AutocompletionTableView.h */,
109 | AE081A4E150EA46500FCE491 /* AutocompletionTableView.m */,
110 | );
111 | name = Classes;
112 | sourceTree = "";
113 | };
114 | /* End PBXGroup section */
115 |
116 | /* Begin PBXNativeTarget section */
117 | AE081A23150E978600FCE491 /* AutocompletionTableView_Demo */ = {
118 | isa = PBXNativeTarget;
119 | buildConfigurationList = AE081A42150E978600FCE491 /* Build configuration list for PBXNativeTarget "AutocompletionTableView_Demo" */;
120 | buildPhases = (
121 | AE081A20150E978600FCE491 /* Sources */,
122 | AE081A21150E978600FCE491 /* Frameworks */,
123 | AE081A22150E978600FCE491 /* Resources */,
124 | );
125 | buildRules = (
126 | );
127 | dependencies = (
128 | );
129 | name = AutocompletionTableView_Demo;
130 | productName = AutocompletionTableView_Demo;
131 | productReference = AE081A24150E978600FCE491 /* AutocompletionTableView_Demo.app */;
132 | productType = "com.apple.product-type.application";
133 | };
134 | /* End PBXNativeTarget section */
135 |
136 | /* Begin PBXProject section */
137 | AE081A1B150E978600FCE491 /* Project object */ = {
138 | isa = PBXProject;
139 | attributes = {
140 | CLASSPREFIX = ACD;
141 | LastUpgradeCheck = 0430;
142 | ORGANIZATIONNAME = "Arseniy Gushin";
143 | };
144 | buildConfigurationList = AE081A1E150E978600FCE491 /* Build configuration list for PBXProject "AutocompletionTableView_Demo" */;
145 | compatibilityVersion = "Xcode 3.2";
146 | developmentRegion = English;
147 | hasScannedForEncodings = 0;
148 | knownRegions = (
149 | en,
150 | );
151 | mainGroup = AE081A19150E978600FCE491;
152 | productRefGroup = AE081A25150E978600FCE491 /* Products */;
153 | projectDirPath = "";
154 | projectRoot = "";
155 | targets = (
156 | AE081A23150E978600FCE491 /* AutocompletionTableView_Demo */,
157 | );
158 | };
159 | /* End PBXProject section */
160 |
161 | /* Begin PBXResourcesBuildPhase section */
162 | AE081A22150E978600FCE491 /* Resources */ = {
163 | isa = PBXResourcesBuildPhase;
164 | buildActionMask = 2147483647;
165 | files = (
166 | AE081A33150E978600FCE491 /* InfoPlist.strings in Resources */,
167 | AE081A3C150E978600FCE491 /* MainStoryboard.storyboard in Resources */,
168 | );
169 | runOnlyForDeploymentPostprocessing = 0;
170 | };
171 | /* End PBXResourcesBuildPhase section */
172 |
173 | /* Begin PBXSourcesBuildPhase section */
174 | AE081A20150E978600FCE491 /* Sources */ = {
175 | isa = PBXSourcesBuildPhase;
176 | buildActionMask = 2147483647;
177 | files = (
178 | AE081A4F150EA46500FCE491 /* AutocompletionTableView.m in Sources */,
179 | AE081A35150E978600FCE491 /* main.m in Sources */,
180 | AE081A39150E978600FCE491 /* ACDAppDelegate.m in Sources */,
181 | AE081A3F150E978600FCE491 /* ACDViewController.m in Sources */,
182 | );
183 | runOnlyForDeploymentPostprocessing = 0;
184 | };
185 | /* End PBXSourcesBuildPhase section */
186 |
187 | /* Begin PBXVariantGroup section */
188 | AE081A31150E978600FCE491 /* InfoPlist.strings */ = {
189 | isa = PBXVariantGroup;
190 | children = (
191 | AE081A32150E978600FCE491 /* en */,
192 | );
193 | name = InfoPlist.strings;
194 | sourceTree = "";
195 | };
196 | AE081A3A150E978600FCE491 /* MainStoryboard.storyboard */ = {
197 | isa = PBXVariantGroup;
198 | children = (
199 | AE081A3B150E978600FCE491 /* en */,
200 | );
201 | name = MainStoryboard.storyboard;
202 | sourceTree = "";
203 | };
204 | /* End PBXVariantGroup section */
205 |
206 | /* Begin XCBuildConfiguration section */
207 | AE081A40150E978600FCE491 /* Debug */ = {
208 | isa = XCBuildConfiguration;
209 | buildSettings = {
210 | ALWAYS_SEARCH_USER_PATHS = NO;
211 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
212 | CLANG_ENABLE_OBJC_ARC = YES;
213 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
214 | COPY_PHASE_STRIP = NO;
215 | GCC_C_LANGUAGE_STANDARD = gnu99;
216 | GCC_DYNAMIC_NO_PIC = NO;
217 | GCC_OPTIMIZATION_LEVEL = 0;
218 | GCC_PREPROCESSOR_DEFINITIONS = (
219 | "DEBUG=1",
220 | "$(inherited)",
221 | );
222 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
223 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
224 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
225 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
226 | GCC_WARN_UNUSED_VARIABLE = YES;
227 | IPHONEOS_DEPLOYMENT_TARGET = 5.1;
228 | SDKROOT = iphoneos;
229 | };
230 | name = Debug;
231 | };
232 | AE081A41150E978600FCE491 /* Release */ = {
233 | isa = XCBuildConfiguration;
234 | buildSettings = {
235 | ALWAYS_SEARCH_USER_PATHS = NO;
236 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
237 | CLANG_ENABLE_OBJC_ARC = YES;
238 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
239 | COPY_PHASE_STRIP = YES;
240 | GCC_C_LANGUAGE_STANDARD = gnu99;
241 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
242 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
243 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
244 | GCC_WARN_UNUSED_VARIABLE = YES;
245 | IPHONEOS_DEPLOYMENT_TARGET = 5.1;
246 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
247 | SDKROOT = iphoneos;
248 | VALIDATE_PRODUCT = YES;
249 | };
250 | name = Release;
251 | };
252 | AE081A43150E978600FCE491 /* Debug */ = {
253 | isa = XCBuildConfiguration;
254 | buildSettings = {
255 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
256 | GCC_PREFIX_HEADER = "AutocompletionTableView_Demo/AutocompletionTableView_Demo-Prefix.pch";
257 | INFOPLIST_FILE = "AutocompletionTableView_Demo/AutocompletionTableView_Demo-Info.plist";
258 | PRODUCT_NAME = "$(TARGET_NAME)";
259 | WRAPPER_EXTENSION = app;
260 | };
261 | name = Debug;
262 | };
263 | AE081A44150E978600FCE491 /* Release */ = {
264 | isa = XCBuildConfiguration;
265 | buildSettings = {
266 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
267 | GCC_PREFIX_HEADER = "AutocompletionTableView_Demo/AutocompletionTableView_Demo-Prefix.pch";
268 | INFOPLIST_FILE = "AutocompletionTableView_Demo/AutocompletionTableView_Demo-Info.plist";
269 | PRODUCT_NAME = "$(TARGET_NAME)";
270 | WRAPPER_EXTENSION = app;
271 | };
272 | name = Release;
273 | };
274 | /* End XCBuildConfiguration section */
275 |
276 | /* Begin XCConfigurationList section */
277 | AE081A1E150E978600FCE491 /* Build configuration list for PBXProject "AutocompletionTableView_Demo" */ = {
278 | isa = XCConfigurationList;
279 | buildConfigurations = (
280 | AE081A40150E978600FCE491 /* Debug */,
281 | AE081A41150E978600FCE491 /* Release */,
282 | );
283 | defaultConfigurationIsVisible = 0;
284 | defaultConfigurationName = Release;
285 | };
286 | AE081A42150E978600FCE491 /* Build configuration list for PBXNativeTarget "AutocompletionTableView_Demo" */ = {
287 | isa = XCConfigurationList;
288 | buildConfigurations = (
289 | AE081A43150E978600FCE491 /* Debug */,
290 | AE081A44150E978600FCE491 /* Release */,
291 | );
292 | defaultConfigurationIsVisible = 0;
293 | defaultConfigurationName = Release;
294 | };
295 | /* End XCConfigurationList section */
296 | };
297 | rootObject = AE081A1B150E978600FCE491 /* Project object */;
298 | }
299 |
--------------------------------------------------------------------------------