## MJRefresh
[](https://github.com/apple/swift-package-manager)
[](https://github.com/Carthage/Carthage)
[](https://cocoapods.org/pods/MJRefresh)
* An easy way to use pull-to-refresh
[ðâð»**Release Notes**: more details](https://github.com/CoderMJLee/MJRefresh/releases)
## Contents
- New Features
- [Dynamic i18n Switching](#dynamic_i18n_switching)
- [SPM Supported](#spm_supported)
- [Swift Chaining Grammar Supported](#swift_chaining_grammar_supported)
* Getting Started
* [FeaturesãSupport what kinds of controls to refreshã](#Support_what_kinds_of_controls_to_refresh)
* [InstallationãHow to use MJRefreshã](#How_to_use_MJRefresh)
* [Who's usingãMore than hundreds of Apps are using MJRefreshã](#More_than_hundreds_of_Apps_are_using_MJRefresh)
* [ClassesãThe Class Structure Chart of MJRefreshã](#The_Class_Structure_Chart_of_MJRefresh)
* Comment API
* [MJRefreshComponent.h](#MJRefreshComponent.h)
* [MJRefreshHeader.h](#MJRefreshHeader.h)
* [MJRefreshFooter.h](#MJRefreshFooter.h)
* [MJRefreshAutoFooter.h](#MJRefreshAutoFooter.h)
* [MJRefreshTrailer.h](#MJRefreshTrailer.h)
* Examples
* [Reference](#Reference)
* [The drop-down refresh 01-Default](#The_drop-down_refresh_01-Default)
* [The drop-down refresh 02-Animation image](#The_drop-down_refresh_02-Animation_image)
* [The drop-down refresh 03-Hide the time](#The_drop-down_refresh_03-Hide_the_time)
* [The drop-down refresh 04-Hide status and time](#The_drop-down_refresh_04-Hide_status_and_time)
* [The drop-down refresh 05-DIY title](#The_drop-down_refresh_05-DIY_title)
* [The drop-down refresh 06-DIY the control of refresh](#The_drop-down_refresh_06-DIY_the_control_of_refresh)
* [The pull to refresh 01-Default](#The_pull_to_refresh_01-Default)
* [The pull to refresh 02-Animation image](#The_pull_to_refresh_02-Animation_image)
* [The pull to refresh 03-Hide the title of refresh status](#The_pull_to_refresh_03-Hide_the_title_of_refresh_status)
* [The pull to refresh 04-All loaded](#The_pull_to_refresh_04-All_loaded)
* [The pull to refresh 05-DIY title](#The_pull_to_refresh_05-DIY_title)
* [The pull to refresh 06-Hidden After loaded](#The_pull_to_refresh_06-Hidden_After_loaded)
* [The pull to refresh 07-Automatic back of the pull01](#The_pull_to_refresh_07-Automatic_back_of_the_pull01)
* [The pull to refresh 08-Automatic back of the pull02](#The_pull_to_refresh_08-Automatic_back_of_the_pull02)
* [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh))
* [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back))
* [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The_pull_and_drop-down_refresh)
* [UICollectionView02-The trailer refresh](#UICollectionView02-The_trailer_refresh)
* [WKWebView01-The drop-down refresh](#WKWebView01-The_drop-down_refresh)
* [Hope](#Hope)
## New Features
### <a id="dynamic_i18n_switching"></a>Dynamic i18n Switching
Now `MJRefresh components` will be rerendered automatically with `MJRefreshConfig.default.language` setting.
#### Example
Go `i18n` folder and see lots of cases. Simulator example is behind `i18n tab` in right-top corner.
#### Setting language
```swift
MJRefreshConfig.default.language = "zh-hans"
```
#### Setting i18n file name
```swift
MJRefreshConfig.default.i18nFilename = "i18n File Name(not include type<.strings>)"
```
#### Setting i18n language bundle
```swift
MJRefreshConfig.default.i18nBundle = <i18n Bundle>
```
#### Adopting the feature in your DIY component
1. Just override `i18nDidChange` function and reset texts.
```swift
// must use this localization methods
Bundle.mj_localizedString(forKey: "")
// or
Bundle.mj_localizedString(forKey: "", value:"")
override func i18nDidChange() {
// Reset texts function
setupTexts()
// Make sure to call super after resetting texts. It will call placeSubViews for applying new layout.
super.i18nDidChange()
}
```
2. Receiving `MJRefreshDidChangeLanguageNotification` notification.
### <a id="spm_supported"></a>SPM Supported
Released from [`3.7.1`](https://github.com/CoderMJLee/MJRefresh/releases/tag/3.7.1)
### <a id="swift_chaining_grammar_supported"></a>Swift Chaining Grammar Supported
```swift
// Example as MJRefreshNormalHeader
func addRefreshHeader() {
MJRefreshNormalHeader { [weak self] in
// load some data
}.autoChangeTransparency(true)
.link(to: tableView)
}
```
## <a id="Support_what_kinds_of_controls_to_refresh"></a>Support what kinds of controls to refresh
* `UIScrollView`ã`UITableView`ã`UICollectionView`ã`WKWebView`
## <a id="How_to_use_MJRefresh"></a>How to use MJRefresh
* Installation with CocoaPodsï¼`pod 'MJRefresh'`
* Installation with [Carthage](https://github.com/Carthage/Carthage)ï¼`github "CoderMJLee/MJRefresh"`
* Manual importï¼
* Drag All files in the `MJRefresh` folder to project
* Import the main fileï¼`#import "MJRefresh.h"`
```objc
Base Custom
MJRefresh.bundle MJRefresh.h
MJRefreshConst.h MJRefreshConst.m
UIScrollView+MJExtension.h UIScrollView+MJExtension.m
UIScrollView+MJRefresh.h UIScrollView+MJRefresh.m
UIView+MJExtension.h UIView+MJExtension.m
```
## <a id="More_than_hundreds_of_Apps_are_using_MJRefresh"></a>More than hundreds of Apps are using MJRefresh
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141212365041650.png" width="200" height="300">
* More information of App can focus onï¼[Mäºä¸ªJ-å客å](http://www.cnblogs.com/mjios/p/4409853.html)
## <a id="The_Class_Structure_Chart_of_MJRefresh"></a>The Class Structure Chart of MJRefresh

- `The class of red text` in the chartï¼You can use them directly
- The drop-down refresh control types
- Normalï¼`MJRefreshNormalHeader`
- Gifï¼`MJRefreshGifHeader`
- The pull to refresh control types
- Auto refresh
- Normalï¼`MJRefreshAutoNormalFooter`
- Gifï¼`MJRefreshAutoGifFooter`
- Auto Back
- Normalï¼`MJRefreshBackNormalFooter`
- Gifï¼`MJRefreshBackGifFooter`
- `The class of non-red text` in the chartï¼For inheritanceï¼to use DIY the control of refresh
- About how to DIY the control of refreshï¼You can refer the Class in below Chart<br>
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141358159107893.png" width="30%" height="30%">
## <a id="MJRefreshComponent.h"></a>MJRefreshComponent.h
```objc
/** The Base Class of refresh control */
@interface MJRefreshComponent : UIView
#pragma mark - Control the state of Refresh
/** BeginRefreshing */
- (void)beginRefreshing;
/** EndRefreshing */
- (void)endRefreshing;
/** IsRefreshing */
- (BOOL)isRefreshing;
#pragma mark - Other
/** According to the drag ratio to change alpha automatically */
@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
@end
```
## <a id="MJRefreshHeader.h"></a>MJRefreshHeader.h
```objc
@interface MJRefreshHeader : MJRefreshComponent
/** Creat header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** Creat header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** This key is used to storage the time that the last time of drown-down successfully */
@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
/** The last time of drown-down successfully */
@propert
评论0