├── .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 | --------------------------------------------------------------------------------