https://github.com/nfhipona/AutoCompleteTextField
TextField with smart suggestion for email inputs
https://github.com/nfhipona/AutoCompleteTextField
carthage cocoapods email-suggestion ios ios-development smart-suggestion swift
Last synced: 10 months ago
JSON representation
TextField with smart suggestion for email inputs
- Host: GitHub
- URL: https://github.com/nfhipona/AutoCompleteTextField
- Owner: nfhipona
- License: mit
- Created: 2016-03-18T18:34:26.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2023-09-05T02:04:41.000Z (over 2 years ago)
- Last Synced: 2024-05-29T04:53:01.219Z (about 2 years ago)
- Topics: carthage, cocoapods, email-suggestion, ios, ios-development, smart-suggestion, swift
- Language: Swift
- Homepage: http://nfhipona.github.io/AutoCompleteTextField/
- Size: 363 KB
- Stars: 65
- Watchers: 6
- Forks: 13
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - AutoCompleteTextField - Auto complete with suggestion textfield. (UI / TextField & TextView)
README
# AutoCompleteTextField
[](https://img.shields.io/badge/build-passed-brightgreen.svg)
[](https://img.shields.io/badge/pod-v0.5.0-blue.svg)
[](https://img.shields.io/badge/Lisence-MIT-yellow.svg)
[](https://github.com/Carthage/Carthage)
[](https://img.shields.io/badge/platform-ios-lightgrey.svg)

## Features
- [x] Provides a subclass of UITextField that has suggestion from input
- [x] Has autocomplete input feature
- [x] Data suggestion are provided by users
- [x] Enable store smart domains
- [x] Optimized and light weight
## Requirements
- iOS 12.0+
- Swift 5.x
## Installation
#### CocoaPods
You can use [CocoaPods](http://cocoapods.org/) to install `AutoCompleteTextField` by adding it to your `Podfile`:
```ruby
pod "AutoCompleteTextField"
```
#### Carthage
Create a `Cartfile` that lists the framework and run `carthage bootstrap`. Follow the [instructions](https://github.com/Carthage/Carthage#if-youre-building-for-ios) to add `$(SRCROOT)/Carthage/Build/iOS/AutoCompleteTextField.framework` to an iOS project.
```
github "nferocious76/AutoCompleteTextField"
```
#### Manually
1. Download and drop ```/Pod/Classes```folder in your project.
2. Congratulations!
## Usage
```Swift
// 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)]
}
// optional delegate for checking what was suggested
func autoCompleteTextField(_ autoCompleteTextField: AutoCompleteTextField, didSuggestDomain domain: ACTFDomain) {
print("Suggested domain: \(domain.text) - weight: \(domain.weight)")
}
```
## ACTFDomain
`ACTFDomain` is class type that conforms to the `Codable`. User can store and retrieve smart domains.
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.
`ACTFDomain` is sorted based on its usage with auto storing flag that is default to true.
This is just one example. Manually providing a suggestion gives more flexibility and does not force the usage of an array of strings.
```Swift
// 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 weightedDomains = [g1, g2, g3, g4] // [ACTFDomain]
// Storing
// store single
if g1.store() {
print("Store success")
}
// store multiple
let errors = ACTFDomain.store(domains: weightedDomains)
if errors.count > 0 {
print("Store domain errors: ", errors)
}
// Retrieving
// retrieved single
if let domain = ACTFDomain.domain(for: "gmail.com") {
print("Retrieved single: ", domain.text, domain.weight)
}
// retrieved multiple
let keys = ["gmail.com", "googlemail.com", "google.com", "georgetown.edu"]
let retriedDomains = ACTFDomain.domain(for: keys)
print("Retrieved domains: ", retriedDomains.map ({ "Domain: \($0.text) - weight: \($0.weight)" }))
```
## Contribute
We would love for you to contribute to `AutoCompleteTextField`. See the [LICENSE](https://github.com/nferocious76/AutoCompleteTextField/blob/master/LICENSE) file for more info.
## Author
Neil Francis Ramirez Hipona, nferocious76@gmail.com
### About
This project was inpired by 'HTAutocompleteTextField' an Objc-C framework of a similar feature.
## License
AutoCompleteTextField is available under the MIT license. See the [LICENSE](https://github.com/nferocious76/AutoCompleteTextField/blob/master/LICENSE) file for more info.