简体   繁体   中英

UIView inside UIView with TextField and Button not working

Good afternoon,

I'm trying to show a UIView when (in my case) there isn't any result to show in a tableView filled with products. When I detect 0 products, I show a UIView which contains a Label, a TextField and a Button, but I can't interact with my TextField and neither with the Button.

It's my first time using this technique to show a UIView when something went wrong with the tableView so I would like to know what's wrong in my code and what I'm missing because it's really weird.

Here is my code (when I print "Product not found" is where I show the UIView):

import UIKit
import Social

class ProductoCamViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet var productoImageView:UIImageView!
@IBOutlet var tableView:UITableView!

@IBOutlet weak var noEncontrado:UIView!

var productoImage:String!

var ean:String!

var producto:Producto!

var productos = [Producto]()

@IBOutlet weak var toolBar: UIToolbar!

@IBOutlet weak var cargando: UIActivityIndicatorView!

override func viewDidLoad() {

    toolBar.hidden = true

    noEncontrado.hidden = true

    cargando.hidden = false

    super.viewDidLoad()

    // Set table view background color
    self.tableView.backgroundColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.2)

    // Remove extra separator
    self.tableView.tableFooterView = UIView(frame: CGRectZero)

    // Change separator color
    self.tableView.separatorColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.8)

    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.estimatedRowHeight = 88.0

    requestPost()

    cargando.hidden = true

    tableView.reloadData()
}

override func viewDidAppear(animated: Bool) {
    tableView.reloadData()
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.hidesBarsOnSwipe = false
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func requestPost () {

    let request = NSMutableURLRequest(URL: NSURL(string: "http://www.mywebsite.com/product.php")!)
    request.HTTPMethod = "POST"
    let postString = "ean="+ean

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        if error != nil {
            print("error=\(error)")
            return
        }

        // JSON RESULTADO ENTERO
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)!

        if (responseString == "Product not found")
        {
            self.noEncontrado.hidden = false
            self.tableView.reloadData()
            return
        }
        else
        {
            self.productos = self.parseJsonData(data!)

            self.toolBar.hidden = false

            // Reload table view
            dispatch_async(dispatch_get_main_queue(), {
                self.tableView.reloadData()
            })
        }
    }
    task.resume()
}

func parseJsonData(data: NSData) -> [Producto] {
    var productos = [Producto]()

    do {
        let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary

        noEncontrado.hidden = true
        // Parse JSON data
        let jsonProductos = jsonResult?["lista_productos"] as! [AnyObject]

        for jsonProducto in jsonProductos {

            let producto = Producto()
            producto.imagen = jsonProducto["imagen"] as! String
            producto.nombre = jsonProducto["nombre"] as! String
            producto.descripcion = jsonProducto["descripcion"] as! String
            producto.modo_de_empleo = jsonProducto["modo_de_empleo"] as! String
            producto.marca = jsonProducto["marca"] as! String
            producto.linea = jsonProducto["linea"] as! String
            producto.distribuidor = jsonProducto["distribuidor"] as! String
            producto.tamano = jsonProducto["tamano"] as! String
            producto.precio = jsonProducto["precio"] as! String
            producto.codigo_nacional = jsonProducto["codigo_nacional"] as! String

            productos.append(producto)
        }
    }
    catch let parseError {
        print(parseError)
    }

    return productos
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // Return the number of sections.
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // Return the number of rows in the section.
    return productos.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    title = productos[indexPath.row].nombre

    let cell = tableView.dequeueReusableCellWithIdentifier("CellDetail", forIndexPath: indexPath) as! ProductoTableViewCell

    cell.selectionStyle = .None

    if let url = NSURL(string: productos[indexPath.row].imagen) {
        if let data = NSData(contentsOfURL: url) {
            self.productoImageView.image = UIImage(data: data)
        }
    }

    cell.nombre.text = productos[indexPath.row].nombre
    cell.descripcion.text = productos[indexPath.row].descripcion
    cell.modo_de_empleo.text = productos[indexPath.row].modo_de_empleo
    cell.marca.text = productos[indexPath.row].marca
    cell.linea.text = productos[indexPath.row].linea
    cell.distribuidor.text = productos[indexPath.row].distribuidor
    cell.tamano.text = productos[indexPath.row].tamano
    cell.precio.text = productos[indexPath.row].precio
    cell.codigo_nacional.text = productos[indexPath.row].codigo_nacional

    cell.layoutIfNeeded()

    return cell
}
}

Thanks in advance.

At first, please try to provide english code :) but anyways. I think the view what should appear is nonEncontrado. There could be some issues but i need to see the storyboard.

  1. The view has userInteraction not enabled. Its a property and can also be activated in the storyboard
  2. The view is overlayed by something else. Maybe the empty tableView.

As an suggestion you could provide this fields in the tableView and just load another DataSource. Than you dont need to fight with extra views. If you provide screens from the Storyboard i could help a bit more. Good Luck :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM