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: 6 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 9 years ago)
- Default Branch: master
- Last Pushed: 2023-09-05T02:04:41.000Z (over 1 year ago)
- Last Synced: 2024-05-29T04:53:01.219Z (12 months 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, [email protected]
### 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.