2016-10-23 1 views
1

Я пытаюсь создать табличное представление, которое может изменить данные внутри него, в зависимости от того, какой бренд был нажат раньше, например, если я нажму на марку Acura, табличное представление затем изменит массив на Acura массив, и когда щелкнули модель автомобиля в Acura, он покажет год автомобиля. проблема с моим кодом ниже заключается в том, что при нажатии на модель бренда автомобиля выбирает одновременно CARBRAND и CARMODEL, и он показывает CAR YEAR. это кажется TableView просто продолжайте выбирать строку, я щелкнулсоздать переменный источник данных для UItableview (с помощью viewcontroller)

здесь

enter image description here

затем держать кнопку вплоть до автомобиля года enter image description here как автомобиль марка и модель автомобиля уже щелкнули с этой точки зрения. enter image description here

Как я остановил табличное представление, щелкнув дважды. класс jobtypeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { вар thetitle = ""

// car make 
     var carbrand = ["Acura","Aston_Martin","AUDI","Bentley","BMW","Buick","Cadillac","Chevrolet","Dodge","FIAT","Ford","Genesis","GMC","Honda","Hyundai","Infinit","Jaguar","JEEP","KIA","Landrover","Lexus","Lincoln","Mazda","MercedezBenz","MINI","Mitsubishi","Nissan","Porsche","Scion","Subaru","Suzuki","Toyota","Volkswagen","Volvo"] 

     // car model 
     var Acura = ["ILX","MDX","NSX","RDX","RLX","RLX Sport Hybrid","TLX"] 
     // car year 
     var caryear = ["1998","1999","2000","2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017"] 

     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      switch thetitle { 
      case "Acura": 
       return Acura.count 
      case "brand": 
       return carbrand.count 
      case "model": 
       return Honda.count 
      case "year": 
       return caryear.count 
      default: 
       return 0 
      } 
     } 
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

      let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 
      switch thetitle { 
      case "Acura": 
       cell.textLabel?.text = Acura[indexPath.row] 
       cell.textLabel?.textAlignment = .Center 

      case "brand": 
       cell.textLabel?.text = carbrand[indexPath.row] 
       cell.textLabel?.textAlignment = .Center 

      case "model": 
       cell.textLabel?.text = Honda[indexPath.row] 
       cell.textLabel?.textAlignment = .Center 

      case "year": 
       cell.textLabel?.text = caryear[indexPath.row] 
       cell.textLabel?.textAlignment = .Center 

      default: 
       cell.textLabel?.text = "" 
      } 

      return cell 
     } 


     func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
      if thetitle == "automotive"{ 
       switch carbrand[indexPath.row]{ 
       case "Acura": 
        print(carbrand[indexPath.row]) 
        tableviewz.hidden = true 
        thetitle = "Acura" 
        tableviewz.deselectRowAtIndexPath(tableviewz.indexPathForSelectedRow!, animated: true) 
        tableviewz.reloadData() 
       default: 
        print("hello") 
       } 
      } 

      if thetitle == "Acura"{ 
       switch Acura[indexPath.row]{ 
       case "ILX": 
        print(Acura[indexPath.row]) 
        tableviewz.hidden = true 
        thetitle = "year" 
        tableviewz.reloadData() 
        tableviewz.hidden = false 
       default: 
        print("hello") 
       } 
      } 
} 

ответ

1

В вашем методе didSelectRowAtIndexPath, когда выполняется первое if заявление, он меняет theTitle на "Acura". Затем, когда выполняется следующий оператор if, его условие (thetitle == "Acura") истинно и выполняются соответствующие операторы. Чтобы исправить это, используйте else if вместо if для второго оператора if: он будет выполнен только в том случае, если первое условие if является ложным.

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if thetitle == "automotive"{ 
     switch carbrand[indexPath.row]{ 
      case "Acura": 
       print(carbrand[indexPath.row]) 
       tableviewz.hidden = true 
       thetitle = "Acura" 
       tableviewz.deselectRowAtIndexPath(tableviewz.indexPathForSelectedRow!, animated: true) 
       tableviewz.reloadData() 
      default: 
       print("hello") 
     } 
    } else if thetitle == "Acura" { 
     switch Acura[indexPath.row]{ 
      case "ILX": 
       print(Acura[indexPath.row]) 
       tableviewz.hidden = true 
       thetitle = "year" 
       tableviewz.reloadData() 
       tableviewz.hidden = false 
      default: 
       print("hello") 
     } 
    } 
} 

В качестве альтернативы реструктуризации двух if S в качестве switch/case блока.

+0

Я скопировал код, и как-то он возвращает пустое после того, как я нажму acura. – Alan

+0

@Alan Вероятно, потому что у вас есть 'tableviewz.hidden = true'. – pbasdf

+0

вы правы, вы спасатель жизни. Спасибо большое – Alan

Смежные вопросы