Передача ImageArray из файла Json в контроллер ImageView - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь получить просмотр таблицы с помощью контроллера поиска, передать массив изображений из файла Json новому контроллеру представления в зависимости от того, какую опцию пользователь выбирает в представлении таблицы панели поиска.Я создал панель поиска для своего приложения, которая отображает всю информацию в приложении, чтобы пользователь мог легко выбрать фотографии, которые он хочет видеть.Это работает нормально, используя просмотр таблицы, и когда пользователь выбирает строку, он отправляет переменную со связанными изображениями в представление изображения на другом экране.

Из-за количества опций, которые я создал, я создалфайл Json.У меня есть код, где он будет возвращать параметры, основанные на том, что пользователь вводит в строку поиска.Моя проблема в том, что я не могу передать массив изображений из файла .json в контроллер представления изображений.Он будет отображать viewcontroller, но представление «array» будет пустым, так как массив изображений не передается.Ниже приведен мой код, и мне интересно, есть ли у кого-нибудь идеи, которые могли бы указать мне правильное направление или сказать, что я делаю неправильно.

Поиск штрих-кода:

import UIKit

class ProtocolCell: UITableViewCell {

@IBOutlet weak var pNameLabel: UILabel!

}

extension String {

func trimmed() -> String {

return self.trimmingCharacters(in: .whitespaces)

}

}

class SearchController: UIViewController, UISearchBarDelegate {

/// Search Bar

@IBOutlet weak var pSearchBar: UISearchBar!

/// Proto Array

fileprivate var myProtocols:[Protocols]?

/// Searhed Array

fileprivate var searchedProtocols:[Protocols]?

/// TableView

@IBOutlet weak var protocolsTV: UITableView!

/// Is Searching

fileprivate var isSearching:Bool=false

override func viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view, typically from a nib.

protocolsTV.tableFooterView=UIView()

pSearchBar.delegate=self

myProtocols=[Protocols]()

searchedProtocols=[Protocols]()

myProtocols?.removeAll()

searchedProtocols?.removeAll()

myProtocols=Functions.getAllProtocolsFromJson()

if protocolsTV.delegate == nil {

protocolsTV.delegate=self

protocolsTV.dataSource=self

}

protocolsTV.reloadData()

}

}

extension SearchController: UITableViewDelegate, UITableViewDataSource {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return isSearching == false ? (myProtocols?.count ?? 0) : (searchedProtocols?.count ?? 0)

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "ProtocolCell") as! ProtocolCell

cell.pNameLabel.text=isSearching == false ? (myProtocols![indexPath.row].pName ?? "") : (searchedProtocols![indexPath.row].pName ?? "")

return cell

}

//EDIT TABLE FUNCTION HERE!!!!!//

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

print("Is Searching: \(isSearching) ImagesArray: \(isSearching==true ? (searchedProtocols?[indexPath.row].imagesName ?? []) : (myProtocols?[indexPath.row].imagesName ?? []))")

let Vc = self.storyboard?.instantiateViewController(withIdentifier: "imageViewController") as! imageViewController

let home = self.storyboard?.instantiateViewController(withIdentifier: "FIRST") as! ViewController

//switch indexPath.section

// {

// case 0:

if searchedProtocols?[indexPath.row].pName == "test" {

let arrayStorage = myProtocols?[indexPath.row].imagesName ?? []

Vc.passedArray = arrayStorage

print(arrayStorage)

print(myProtocols?[indexPath.row].imagesName ?? [])

self.navigationController?.pushViewController(Vc, animated: true)

}

else {

self.navigationController?.pushViewController(home, animated: true)

}

// break;

// default:

// self.navigationController?.pushViewController(home, animated: true)

// }

}

func updateSearchData(With searchText: String, In searchBar: UISearchBar) {

if searchText.trimmed().count == 0 {

isSearching=false

searchBar.setShowsCancelButton(false, animated: true)

} else {

isSearching=true

searchBar.setShowsCancelButton(true, animated: true)

}

if isSearching {

/// We Are Searching Sort Array

if searchedProtocols == nil { searchedProtocols=[Protocols]() }

searchedProtocols?.removeAll()

searchedProtocols=myProtocols!.filter({($0.pName ?? "").lowercased().contains(searchText.lowercased())})

/// Make Set So, Data isn't Repeated

searchedProtocols=Array(Set(searchedProtocols ?? []))

} else {

/// Searching is Stopped

searchedProtocols?.removeAll()

}

protocolsTV.reloadData()

}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

updateSearchData(With: searchText, In: searchBar)

}

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

self.view.endEditing(true)

}

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {

searchBar.setShowsCancelButton(false, animated: true)

searchBar.text=nil

isSearching=false

searchedProtocols?.removeAll()

protocolsTV.reloadData()

self.view.endEditing(true)

}

}

ДругоеИспользуемый код:

class Protocols: NSObject {

var pName:String?

var imagesName:[UIImage]!

override init() {}

init(With Dict: [String:Any]) {

pName=Dict["name"] as? String ?? ""

imagesName=Dict["imagesArray"] as? [UIImage] ?? []

}

ImageViewController:

class imageViewController: UIViewController,GADBannerViewDelegate, UIGestureRecognizerDelegate, UIScrollViewDelegate {
    @IBOutlet weak var pageControl: UIPageControl!

    var bannerView: GADBannerView!

    var index = 0
    var mySelectedProtocol:Protocols?

    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var myImageView: UIImageView!


    @IBAction func pictureSwipe(_ sender: Any) {

     let pictureString = self.passedArray[index]
    self.myImageView.image = pictureString
    index = (index < passedArray.count-1) ? index+1 : 0
    self.pageControl.numberOfPages = passedArray.count
    self.pageControl.currentPage = index
}

    @IBAction func pictureswipeback(_ sender: Any) {
        let pictureString = self.passedArray[index]
        self.myImageView.image = pictureString
        index = (passedArray.count-1)
        self.pageControl.numberOfPages = passedArray.count
        self.pageControl.currentPage = index

    }

    func configurePageControl() {
        self.pageControl.numberOfPages = passedArray.count
        self.pageControl.currentPage = 0
        self.pageControl.pageIndicatorTintColor = UIColor.white
        self.pageControl.currentPageIndicatorTintColor = UIColor.red
        self.view.addSubview(pageControl)
        if index == 1 {
            self.pageControl.currentPage = 1
        }
        func updateCurrentPageDisplay(){
            self.pageControl.numberOfPages = passedArray.count
        }
    }

    var passedImage : UIImage! = nil
    var passedArray : [UIImage]!


    override func viewDidLoad(){
        super.viewDidLoad()
        self.myImageView.image = passedArray.first
        configurePageControl()
        scrollView.delegate = self



    self.navigationController?.navigationBar.isHidden = false

        scrollView.minimumZoomScale = 1.0
        scrollView.maximumZoomScale = 5.0

1 Ответ

0 голосов
/ 27 февраля 2019

В контроллере назначения

class DestinationVC: UIViewController {

    var mySelectedProtocol:Protocols?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        if mySelectedProtocol == nil { self.navigationController?.popViewController(animated: true) }
        /// We have Data
        print("Img Array with Name ==> \(mySelectedProtocol?.imagesName ?? [])")

    }
}

В контроллере исходного кода Делегат TableView

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Is Searching: \(isSearching) ImagesArray: \(isSearching==true ? (searchedProtocols?[indexPath.row].imagesName ?? []) : (myProtocols?[indexPath.row].imagesName ?? []))")
        let vc:DestinationVC=mainStoryBoard.instantiateViewController(withIdentifier: "DestinationVC") as! DestinationVC
        vc.mySelectedProtocol=isSearching==true ? (searchedProtocols?[indexPath.row]) : (myProtocols?[indexPath.row])
        self.navigationController?.pushViewController(vc, animated: true)
    }

Обновление 2 - Показать изображения как PageViewController

private func addPageView() {
        myScrollView.backgroundColor=UIColor.clear
        myScrollView.isUserInteractionEnabled=true
        myScrollView.showsHorizontalScrollIndicator=false
        myScrollView.isPagingEnabled=true
        myScrollView.delegate=self
        myScrollView.bounces=false

        self.count=mySelectedProtocol!.imagesName!.count
        for i in 0..<self.count {
            ///Get Origin
            let xOrigin : CGFloat = CGFloat(i) * myScrollView.frame.size.width
            ///Create a imageView
            let imageView = UIImageView()
            imageView.frame = CGRect(x: xOrigin, y: 0, width: myScrollView.frame.size.width, height: myScrollView.frame.size.height)
            imageView.contentMode = .scaleAspectFit
            imageView.image=UIImage(named: mySelectedProtocol!.imagesName![i])
            myScrollView.addSubview(imageView)
        }
        setUpPageControl()
        ///Set Content Size to Show
        myScrollView.contentSize = CGSize(width: myScrollView.frame.size.width * CGFloat(self.count), height: myScrollView.frame.size.height)
    }
...