正在進行中, 逐漸完善文檔和項目
組件倉庫: https://github.com/NJHu/NJSpecs.git
基類(待完善)
控制器(待完善)
image
NJNavigationController
- 0, 僅適用導航控制器的邏輯功能, 不適用系統(tǒng)導航條.
- 1, 隱藏導航條
- 2, 全局滑動返回和控制全局滑動返回的功能
// MARK:- gesture
extension NJNavigationController: UIGestureRecognizerDelegate {
private func getSystemGestureOfBack() {
let panGes = UIPanGestureRecognizer(target: self.interactivePopGestureRecognizer?.delegate, action: Selector(("handleNavigationTransition:")))
view.addGestureRecognizer(panGes)
panGes.delegate = self
self.interactivePopGestureRecognizer?.isEnabled = false
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if let vc = self.childViewControllers.last as? NJNavBarViewController {
return (self.childViewControllers.count > 1 && !vc.nj_interactivePopDisabled)
}else {
return false
}
}
}
NJNavigationBar
public let bottomSepLineView = UIView()
public let titleLabel = UILabel()
NJNavBarViewController
- 0, 繼承自 UIViewController, 添加了一個自定義的導航條 View
nj_navigationBar.isHidden = !(parent != nil && parent!.isKind(of: NJNavigationController.classForCoder()))
- 1, 處理 StatusBar
// MARK:- StatusBar
// setNeedsStatusBarAppearanceUpdate()
extension NJNavBarViewController {
override var prefersStatusBarHidden: Bool {
return false
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.default
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
}
- 2, 控制標題
nj_navigationBar.titleLabel.text = navigationItem.title != nil ? navigationItem.title : title
navigationItem.addObserver(self, forKeyPath: "title", options: NSKeyValueObservingOptions.new, context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
let navigationItem = object as? UINavigationItem
if keyPath! == "title" && (navigationItem != nil) && (navigationItem! == self.navigationItem) {
nj_navigationBar.titleLabel.text = change?[NSKeyValueChangeKey.newKey] as? String
}else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}
NJViewController
- 0, 基本設(shè)置
view.backgroundColor = UIColor.groupTableViewBackground
automaticallyAdjustsScrollViewInsets = false
- 1, 控制器釋放的打印
- 2, ...
NJTableViewController
- 擁有一個 UITableView, 添加在 self.view上
@IBOutlet var tableView: UITableView?
override func viewDidLoad() {
super.viewDidLoad()
if tableView == nil {
addTableView()
}
setupTableView()
}
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
scrollView.scrollIndicatorInsets = scrollView.contentInset
view.endEditing(true)
}
NJCollectionViewController
- 擁有一個 UICollectionView, 添加在 self.view上
NJWebViewController
- 1, 添加一個 WKWebView 在 self.view上
- 2, 實現(xiàn) wkwebView 所有的基本配置
- 3, 導航條上添加 ** 返回 ** ** 關(guān)閉 ** 按鈕 實現(xiàn)基本的網(wǎng)頁瀏覽功能
- 3, 監(jiān)聽進度, 監(jiān)聽標題改變, 監(jiān)聽 contentSize 改變,
public var isNeedProgressLine: Bool = true
public var isAutoChangeTitle: Bool = true
public var webView: WKWebView? = nil
public var html: String? = nil
private lazy var closeBtn: UIButton = UIButton(type: UIButtonType.custom)
private lazy var backBtn: UIButton = UIButton(type: UIButtonType.custom)
private lazy var progressView: UIProgressView = UIProgressView()
public var gotoUrl: String? {
didSet {
gotoUrl = self.gotoUrl?.addingPercentEncoding(withAllowedCharacters: CharacterSet.init(charactersIn: "`#%^{}\"[]|\\<> ").inverted)
}
}
NJRefreshTableViewController
- 讓 TableView 擁有上拉加載, 下拉刷新的功能
NJRefreshCollectionViewController
- 讓 CollectionView 擁有上拉加載, 下拉刷新的功能