- Provides a subclass of UITextField that has suggestion from input
- Data suggestion are provided by users
- Has autocomplete input feature
- Optimized and light weight
- iOS 8.0+ / Mac OS X 10.9+
- Xcode 7.2+
You can use CocoaPods to install AutoCompleteTextField by adding it to your Podfile:
pod "AutoCompleteTextField"Create a Cartfile that lists the framework and run carthage bootstrap. Follow the instructions to add $(SRCROOT)/Carthage/Build/iOS/AutoCompleteTextField.framework to an iOS project.
github "nferocious76/AutoCompleteTextField"
- Download and drop
/Pod/Classesfolder in your project. - Congratulations!
// Initializing `AutoCompleteTextField`
let myTextField = AutoCompleteTextField(frame: CGRect(x: 20, y: 64, width: view.frame.width - 40, height: 40), dataSource: `YourDataSource`, delegate: `YourDelegate`)
// Setting `dataSource`, it can be set from the XCode IB like `TextFieldDelegate` in which will appear as `actfDataSource`
myTextField.dataSource = `YourDataSource`
// Setting delimiter (optional). If set, it will only look for suggestion after the delimiter
myTextField.setDelimiter("@")
// Show `AutoCompleteButton`
myTextField.showAutoCompleteButtonWithImage(UIImage(named: "checked"), viewMode: .whileEditing)
// Providing data source to get the suggestion from inputs
func autoCompleteTextFieldDataSource(_ autoCompleteTextField: AutoCompleteTextField) -> [ACTFWeightedDomain] {
return weightedDomains // AutoCompleteTextField.domainNames // [ACTFDomain(text: "gmail.com", weight: 0), ACTFDomain(text: "hotmail.com", weight: 0), ACTFDomain(text: "domain.net", weight: 0)]
}ACTFDomain is struct type that conforms to the ACTFWeightedDomain. User can create a weighted custom Class or Struct that conforms to ACTFWeightedDomain.
Use the ACTFWeightedDomain when providing a suggestion that is found through custom sorting for better user experience where we add a weight usage to the domains to show up first if they are more popular. Weight will be dynamically updated with updateWeightUsage() which will be triggered upon successful use of domain.
One example may be 'gmail.com' and 'georgetown.edu'. Users are more likely to have a 'gmail.com' account so we would want that to show up before 'georgetown.edu', even though that is out of alphabetical order.
This is just one example. Manually providing a suggestion gives more flexibility and does not force the usage of an array of strings.
// Creating custom class comforming to `ACTFWeightedDomain`
class CustomACTFDomain: ACTFWeightedDomain {
let text: String
var weight: Int
var customObject: AnyObject!
public init(customText t: String, customWeight w: Int, customObject c: AnyObject! = nil) {
text = t
weight = w
customObject = c
}
func updateWeightUsage() {
weight += 1
}
}
// Usage
let g1 = ACTFDomain(text: "gmail.com", weight: 10)
let g2 = ACTFDomain(text: "googlemail.com", weight: 5)
let g3 = ACTFDomain(text: "google.com", weight: 4)
let g4 = ACTFDomain(text: "georgetown.edu", weight: 1)
let g5 = CustomACTFDomain(customText: "google.com.ph", customWeight: 4, customObject: self)
let weightedDomains = [g1, g2, g3, g4, g5] // [ACTFWeightedDomain]We would love for you to contribute to AutoCompleteTextField. See the LICENSE file for more info.
Neil Francis Ramirez Hipona, [email protected]
This project was inpired by 'HTAutocompleteTextField' an Objc-C framework of the same feature.
AutoCompleteTextField is available under the MIT license. See the LICENSE file for more info.
