Button popover programmatically

This commit is contained in:
Chris Li 2017-01-25 14:52:28 -05:00
parent d2dfaa7612
commit a44c087161
2 changed files with 55 additions and 36 deletions

View File

@ -21,19 +21,53 @@ class LibraryBooksController: CoreDataCollectionBaseController, UICollectionView
}
}
@IBAction func dismissButtonTapped(_ sender: UIBarButtonItem) {
dismiss(animated: true, completion: nil)
}
func configureItemWidth(collectionViewWidth: CGFloat) {
let itemsPerRow = (collectionViewWidth / 320).rounded()
itemWidth = (collectionViewWidth - 1 * (itemsPerRow - 1)) / itemsPerRow
}
// MARK: - UIControls
let languageFilterButton = UIBarButtonItem(image: UIImage(named: "LanguageFilter"), style: .plain, target: nil, action: nil)
let downlaodButton = UIBarButtonItem(image: UIImage(named: "Download"), style: .plain, target: nil, action: nil)
@IBAction func dismissButtonTapped(_ sender: UIBarButtonItem) {
dismiss(animated: true, completion: nil)
}
func configureBarButtons() {
if isCloudTab {
languageFilterButton.target = self
languageFilterButton.action = #selector(languageFilterButtonTapped(sender:))
downlaodButton.target = self
downlaodButton.action = #selector(downloadButtonTapped(sender:))
navigationItem.rightBarButtonItems = [languageFilterButton, downlaodButton]
} else {
navigationItem.rightBarButtonItem = editButtonItem
}
}
func languageFilterButtonTapped(sender: UIBarButtonItem) {
let controller = UIStoryboard(name: "Library", bundle: nil).instantiateViewController(withIdentifier: "LibraryLanguageNavController")
controller.modalPresentationStyle = .popover
controller.popoverPresentationController?.barButtonItem = sender
present(controller, animated: true, completion: nil)
}
func downloadButtonTapped(sender: UIBarButtonItem) {
let controller = UIStoryboard(name: "Library", bundle: nil).instantiateViewController(withIdentifier: "LibraryDownloadNavController")
controller.modalPresentationStyle = .popover
controller.popoverPresentationController?.barButtonItem = sender
present(controller, animated: true, completion: nil)
}
// MARK: - Override
override func viewDidLoad() {
super.viewDidLoad()
configureRefreshControl()
configureBarButtons()
if isCloudTab { configureRefreshControl() }
if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.minimumInteritemSpacing = 1
layout.minimumLineSpacing = 1
@ -186,11 +220,15 @@ class LibraryBooksController: CoreDataCollectionBaseController, UICollectionView
}()
var predicate: NSCompoundPredicate {
let displayedLanguages = Language.fetch(displayed: true, context: managedObjectContext)
return NSCompoundPredicate(andPredicateWithSubpredicates: [
NSPredicate(format: "stateRaw == 0 OR stateRaw == 1"),
displayedLanguages.count > 0 ? NSPredicate(format: "language IN %@", displayedLanguages) : NSPredicate(format: "language.name != nil")
])
if isCloudTab {
let displayedLanguages = Language.fetch(displayed: true, context: managedObjectContext)
return NSCompoundPredicate(andPredicateWithSubpredicates: [
NSPredicate(format: "stateRaw == 0 OR stateRaw == 1"),
displayedLanguages.count > 0 ? NSPredicate(format: "language IN %@", displayedLanguages) : NSPredicate(format: "language.name != nil")
])
} else {
return NSCompoundPredicate(andPredicateWithSubpredicates: [NSPredicate(format: "stateRaw == 2")])
}
}
func reloadFetchedResultController() {

View File

@ -7,7 +7,6 @@
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12072"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="Navigation items with more than one left or right bar item" minToolsVersion="7.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
@ -156,22 +155,6 @@
<action selector="dismissButtonTapped:" destination="cDq-va-k4I" id="RgX-lM-cfN"/>
</connections>
</barButtonItem>
<rightBarButtonItems>
<barButtonItem image="LanguageFilter" id="0v8-uV-zCG">
<connections>
<segue destination="yzc-l3-ioG" kind="popoverPresentation" identifier="showLangFilter" popoverAnchorBarButtonItem="0v8-uV-zCG" id="hlL-SF-vTM">
<popoverArrowDirection key="popoverArrowDirection" up="YES" down="YES" left="YES" right="YES"/>
</segue>
</connections>
</barButtonItem>
<barButtonItem image="Download" id="dtT-qi-KWI">
<connections>
<segue destination="slW-nF-UiF" kind="popoverPresentation" popoverAnchorBarButtonItem="dtT-qi-KWI" id="NDd-oj-RlO">
<popoverArrowDirection key="popoverArrowDirection" up="YES" down="YES" left="YES" right="YES"/>
</segue>
</connections>
</barButtonItem>
</rightBarButtonItems>
</navigationItem>
<connections>
<outlet property="collectionView" destination="UY0-46-c3y" id="lFH-jM-jh7"/>
@ -212,12 +195,12 @@
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="h1k-OL-RxH" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-1112.8" y="-1395.6521739130435"/>
<point key="canvasLocation" x="-1074" y="-1396"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="009-Nq-Jlu">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="yzc-l3-ioG" sceneMemberID="viewController">
<navigationController storyboardIdentifier="LibraryLanguageNavController" automaticallyAdjustsScrollViewInsets="NO" id="yzc-l3-ioG" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="Wdw-pU-0LU">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@ -230,7 +213,7 @@
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="HvZ-jb-XAs" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="722" y="-1396"/>
<point key="canvasLocation" x="-1074" y="65"/>
</scene>
<!--Library Language Controller-->
<scene sceneID="jB1-ec-I5Q">
@ -296,12 +279,12 @@
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="MZw-BB-s9z" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1623" y="-1397"/>
<point key="canvasLocation" x="-174" y="64"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="INT-af-HVz">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="slW-nF-UiF" sceneMemberID="viewController">
<navigationController storyboardIdentifier="LibraryDownloadNavController" automaticallyAdjustsScrollViewInsets="NO" id="slW-nF-UiF" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="AEw-P0-Tdq">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@ -314,7 +297,7 @@
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="z5c-N8-xas" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="721" y="-2118"/>
<point key="canvasLocation" x="-1074" y="-657"/>
</scene>
<!--Library Download Controller-->
<scene sceneID="oBK-si-54D">
@ -389,13 +372,11 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Rra-HQ-Ajz" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1622" y="-2119"/>
<point key="canvasLocation" x="-174" y="-658"/>
</scene>
</scenes>
<resources>
<image name="Cross" width="16" height="16"/>
<image name="Dots" width="16" height="16"/>
<image name="Download" width="16" height="16"/>
<image name="LanguageFilter" width="16" height="16"/>
</resources>
</document>