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) { func configureItemWidth(collectionViewWidth: CGFloat) {
let itemsPerRow = (collectionViewWidth / 320).rounded() let itemsPerRow = (collectionViewWidth / 320).rounded()
itemWidth = (collectionViewWidth - 1 * (itemsPerRow - 1)) / itemsPerRow 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() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
configureRefreshControl() configureBarButtons()
if isCloudTab { configureRefreshControl() }
if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout { if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.minimumInteritemSpacing = 1 layout.minimumInteritemSpacing = 1
layout.minimumLineSpacing = 1 layout.minimumLineSpacing = 1
@ -186,11 +220,15 @@ class LibraryBooksController: CoreDataCollectionBaseController, UICollectionView
}() }()
var predicate: NSCompoundPredicate { var predicate: NSCompoundPredicate {
let displayedLanguages = Language.fetch(displayed: true, context: managedObjectContext) if isCloudTab {
return NSCompoundPredicate(andPredicateWithSubpredicates: [ let displayedLanguages = Language.fetch(displayed: true, context: managedObjectContext)
NSPredicate(format: "stateRaw == 0 OR stateRaw == 1"), return NSCompoundPredicate(andPredicateWithSubpredicates: [
displayedLanguages.count > 0 ? NSPredicate(format: "language IN %@", displayedLanguages) : NSPredicate(format: "language.name != nil") 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() { func reloadFetchedResultController() {

View File

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