UIView里面的UIView,TextField和Button不工作

时间:2015-09-30 14:35:22

标签: ios swift uiview swift2 ios9

下午好,

我正在尝试显示UIView(在我的情况下)没有任何结果显示在填充了产品的tableView中。当我检测到0个产品时,我会显示一个包含Label,TextField和Button的UIView,但我无法与TextField交互,也无法与Button交互。

这是我第一次使用这种技术在tableView出现问题时显示UIView,所以我想知道我的代码中有什么问题以及我错过了什么因为它真的很奇怪。

这是我的代码(当我打印“未找到产品”是我展示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
}
}

提前致谢。

1 个答案:

答案 0 :(得分:3)

首先,请尝试提供英文代码:)但无论如何。我认为应该出现的观点是nonEncontrado。 可能会有一些问题,但我需要看故事板。

  1. 视图未启用userInteraction。它是一个属性,也可以在故事板中激活
  2. 视图被其他内容覆盖。也许是空的tableView。
  3. 作为建议,您可以在tableView中提供此字段,然后只加载另一个DataSource。比你不需要与额外的意见斗争。如果您从故事板提供屏幕,我可以提供更多帮助。 祝你好运:)