vendoo_v1.0/Vendoo/ItemTableViewController.swift
Okechi Onyeje 26affd96e4 User interaction disabled when side menu open
almost fully implemented but when opening side menu at items table, closing menu, switch tabs to network views, open menu, close menu, and switch back to items table, userInteraction mysteriously reenabled
2016-11-29 00:47:09 -05:00

373 lines
16 KiB
Swift

//
// ItemTableViewController.swift
// Vendoo
//
// Created by Okechi Onyeje on 5/26/16.
// Copyright © 2016 Okechi Onyeje. All rights reserved.
//
/*
This class will be used to retrieve and manipulate data seen by the end user for he/she's item listings
*/
import UIKit
import TYMActivityIndicatorView
import SWRevealViewController
class ItemTableViewController: UIViewController {
//outlet
@IBOutlet weak var itemTable: UITableView!
@IBOutlet weak var tableSegmentController: UISegmentedControl!
@IBOutlet weak var menuButton: UIBarButtonItem!
var loadingView: UIView!
var selectedListing: Listing!
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
self.tabBarController?.tabBar.hidden = false
//set delegates
self.itemTable.dataSource = self
self.itemTable.delegate = self
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(stopIndicator), name: "finished_fetching_listings", object: nil)
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
(menuButton.target as! SWRevealViewController).delegate = self
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
self.loadingView = UIView(frame: self.view.frame)
self.loadingView.backgroundColor = UIColor.grayColor()
self.loadingView.alpha = 0.4
((self.tabBarController as? HomeViewController)?.firebaseManager.indicator)!.center = self.view.center
self.loadingView.addSubview(((self.tabBarController as? HomeViewController)?.firebaseManager.indicator)!)
self.view.addSubview(loadingView)
(self.tabBarController as? HomeViewController)?.firebaseManager.indicator.startAnimating()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.hidden = false
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func stopIndicator(){
(self.tabBarController as? HomeViewController)?.firebaseManager.indicator.stopAnimating()
self.loadingView.removeFromSuperview()
self.itemTable.reloadData()
}
/*
*/
}
// MARK: - IBAction
extension ItemTableViewController {
@IBAction func segSwitch(sender: UISegmentedControl) {
self.itemTable.reloadData()
}
}
// MARK: - Side Menu View
extension ItemTableViewController: SWRevealViewControllerDelegate {
func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) {
if(position == FrontViewPosition.Left) {
for view in self.view.subviews {
view.userInteractionEnabled = true
}
self.tabBarController?.tabBar.userInteractionEnabled = true
} else {
for view in self.view.subviews {
if !view.isKindOfClass(UINavigationBar){
view.userInteractionEnabled = false
}
}
self.tabBarController?.tabBar.userInteractionEnabled = false
}
}
func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) {
if(position == FrontViewPosition.Left) {
for view in self.view.subviews {
view.userInteractionEnabled = true
}
self.tabBarController?.tabBar.userInteractionEnabled = true
} else {
for view in self.view.subviews {
if !view.isKindOfClass(UINavigationBar){
view.userInteractionEnabled = false
}
}
self.tabBarController?.tabBar.userInteractionEnabled = false
}
}
}
// MARK: - Navigation
extension ItemTableViewController {
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
let des = segue.destinationViewController as! ListingPreviewViewController
var tempImages: [UIImageView] = []
for uiImage in self.selectedListing.images {
tempImages.append(UIImageView(image: uiImage))
}
let dict:[String:AnyObject] = [
"pictures": tempImages,
"title": self.selectedListing.title != nil ? self.selectedListing.title : "",
"description": self.selectedListing.desc != nil ? self.selectedListing.desc: "",
"price": self.selectedListing.price != nil ? self.selectedListing.price : "",
"category": self.selectedListing.category != nil ? self.selectedListing.category : "",
"quantity": self.selectedListing.quantity != nil ? self.selectedListing.quantity: nil
]
des.setDictionary(self.selectedListing.networks, itemdictionary: dict)
des.setManagers(
((self.tabBarController as? HomeViewController)?.fbGraphManager)!,
fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!,
ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!,
etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)!
)
if self.selectedListing.isDraft! {
des.setViewState("Editible")
}else {
des.setViewState("NonEditable")
}
}
}
// MARK: - TableView Datasource methods
extension ItemTableViewController: UITableViewDataSource{
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if self.tableSegmentController.selectedSegmentIndex == 0 {
return ((self.tabBarController as? HomeViewController)?.userListings.count)!
}
else if tableSegmentController.selectedSegmentIndex == 1 {
return ((self.tabBarController as? HomeViewController)?.endedListings.count)!
}
else{
return ((self.tabBarController as? HomeViewController)?.soldListings.count)!
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: ItemCell! = (tableView.dequeueReusableCellWithIdentifier("Item Cell", forIndexPath: indexPath) as! ItemCell)
// Configure the cell...
//for each listing cell generated need to find the marketplaces it belongs to, the listing price, the name of the item, the status of the item, and the item image.
//Once these objects are retrieved, access the ItemCell properties and manipulate as needed
if self.tableSegmentController.selectedSegmentIndex == 0 {
cell.itemImage.image = (self.tabBarController as? HomeViewController)?.userListings[indexPath.row].images[0] //come back
cell.itemName.text = (self.tabBarController as? HomeViewController)!.userListings[indexPath.row].title
cell.itemPrice.text = (self.tabBarController as? HomeViewController)!.userListings[indexPath.row].price
//check if item is published
if((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].isDraft!){
cell.itemStatus.text = "Status: Unpublished"
dispatch_async(dispatch_get_main_queue(), {
cell.alpha = 0.5
})
}else {
cell.itemStatus.text = "Status: Active"
}
if(!((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["areNetworksChosen"])!){
cell.networks.hidden = true
}else{
cell.selectedNetworks = []
dispatch_async(dispatch_get_main_queue(), {
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["ebay"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true
cell.addNetwork("ebay_icon")
}
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["amazon"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true
cell.addNetwork("amazon_icon")
}
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["etsy"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true
cell.addNetwork("etsy_icon")
}
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["facebook"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true
cell.addNetwork("facebook_icon")
}
cell.networks.reloadData()
})
}
}
else if tableSegmentController.selectedSegmentIndex == 1 {
cell.itemImage.image = (self.tabBarController as? HomeViewController)?.endedListings[indexPath.row].images[0] //come back
cell.itemName.text = (self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].title
cell.itemPrice.text = (self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].price
cell.itemStatus.text = "Status: Unsold"
if(!((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["areNetworksChosen"])!){
cell.networks.hidden = true
}else{
cell.selectedNetworks = []
dispatch_async(dispatch_get_main_queue(), {
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["ebay"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true
cell.addNetwork("ebay_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["amazon"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true
cell.addNetwork("amazon_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["etsy"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true
cell.addNetwork("etsy_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["facebook"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true
cell.addNetwork("facebook_icon")
}
cell.networks.reloadData()
})
}
}
else{
cell.itemImage.image = (self.tabBarController as? HomeViewController)?.soldListings[indexPath.row].images[0] //come back
cell.itemName.text = (self.tabBarController as? HomeViewController)!.soldListings[indexPath.row].title
cell.itemPrice.text = (self.tabBarController as? HomeViewController)!.soldListings[indexPath.row].price
cell.itemStatus.text = "Status: Sold"
if(!((self.tabBarController as? HomeViewController)!.soldListings[indexPath.row].networks["areNetworksChosen"])!){
cell.networks.hidden = true
}else{
cell.selectedNetworks = []
dispatch_async(dispatch_get_main_queue(), {
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["ebay"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true
cell.addNetwork("ebay_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["amazon"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true
cell.addNetwork("amazon_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["etsy"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true
cell.addNetwork("etsy_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["facebook"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true
cell.addNetwork("facebook_icon")
}
cell.networks.reloadData()
})
}
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if self.tableSegmentController.selectedSegmentIndex == 0 {
self.selectedListing = (self.tabBarController as? HomeViewController)?.userListings[indexPath.row]
}
else if tableSegmentController.selectedSegmentIndex == 1 {
self.selectedListing = (self.tabBarController as? HomeViewController)?.endedListings[indexPath.row]
}
else{
self.selectedListing = (self.tabBarController as? HomeViewController)?.soldListings[indexPath.row]
}
self.performSegueWithIdentifier("ItemDetailSegue", sender: self)
}
}
//MARK: - Tableview Delegate Methods
extension ItemTableViewController: UITableViewDelegate {
/*
// Override to support conditional editing of the table view.
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
// Delete the row from the data source
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
} else if editingStyle == .Insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
}