2015-07-17 1 views
2

Я относительно новичок в Swift. Я попытался найти и решить проблему, но я не могу найти ответы. Это не должно быть так сложно. Надеюсь, вы, ребята, можете мне помочь. Я борюсь с этой проблемой в течение нескольких дней:Загрузка массива в TableView на основе сегмента управления

Я создал таблицу, которая загружает массив кортежей из другого .swift-файла. Это прекрасно работает! Теперь я хочу, чтобы tableview выбирал .swift на основе «управления сегментом». Поэтому, если Segment-Control переключится на «A», я хочу, чтобы он отображал массив «PSSCBOOKMac.Swift», для B это был массив «PSSCBOOKWin.swift».

Действие ist написано правильно, я полагаю (печатные заявления работают). Но изменение контроля сегмента не влияет на Tableview. Мое предположение: сегмент-контроль не влияет на представление таблицы, потому что он был загружен раньше, и я не могу изменить значение. Как я могу это достичь?

Приветствия за любые ответы!

Вот код:

import UIKit 

class ViewController: UIViewController, UITableViewDataSource { 
    @IBOutlet weak var PSSCSegmentControl: UISegmentedControl! 

    //LOAD ARRAY FROM PSSCBOOK.SWIFT 
    var PSSCBook = PSSCBOOKMac() 

    @IBAction func PSSCSegmentControlChoose(sender: AnyObject) { 
     if PSSCSegmentControl.selectedSegmentIndex == 0 { 
      var PSSCBook = PSSCBOOKMac() 
      println("im mac") 
     } else { 
      var PSSCBook = PSSCBOOKWin() 
      println("im win") 
     } 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 2 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if section == 0 { 
      return PSSCBook.PSSCTools.count 
     } else { 
      return PSSCBook.PSSCFile.count 
     } 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell = tableView.dequeueReusableCellWithIdentifier("PSCell", forIndexPath: indexPath) as! UITableViewCell 
     if indexPath.section == 0 { 
      let (shortCutTitle,shortCutKey) = PSSCBook.PSSCTools[indexPath.row] 
      cell.textLabel?.text = shortCutTitle 
      cell.detailTextLabel?.text = shortCutKey 
     } else { 
      let (shortCutTitle,shortCutKey) = PSSCBook.PSSCFile[indexPath.row] 
      cell.textLabel?.text = shortCutTitle 
      cell.detailTextLabel?.text = shortCutKey 
     } 

     /* var PSIcon = UIImage(named: "PSIcon") 
     cell.imageView?.image = PSIcon */ 

     return cell 
    } 

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     if section == 0 { 
      return "Tools" 
     } else { 
      return "File" 
     } 
    } 
} 

ответ

2

При обновлении источника данных вашего зрения таблицы, он не будет волшебно обновляться.

Вы должны перезагрузить вид таблицы для того, чтобы изменения происходят:

@IBAction func PSSCSegmentControlChoose(sender: AnyObject) { 
    if PSSCSegmentControl.selectedSegmentIndex == 0 { 
     var PSSCBook = PSSCBOOKMac() 
     println("im mac") 
    } else { 
     var PSSCBook = PSSCBOOKWin() 
     println("im win") 
    } 
    self.tableView.reloadData(); 
} 
+0

Большое спасибо! Это звучит очень логично. К сожалению, xcode показывает мне ошибку в «self.tableView.reloadData();» линия. В нем говорится: «Нельзя вызывать« reloadData »без аргументов. Идеи – Jeffrey

+1

Вы пробовали, возможно, ошибаться в ошибке, а не просто ждать, пока кто-то решит вашу проблему? (http://stackoverflow.com/questions/30733126/swift-cannot-invoke-reloaddata-with-no-arguments) –

+0

Да, вы правы. Обычно я это делаю. Думал, что я пропустил какую-то деталь. Благодарю. – Jeffrey

0

Я провел последние два дня, пытаясь выяснить, что случилось с моим кодом. Я внедрил предложенный reloadData() без ошибок. Значения println в консоли меняются .. Но tableview просто не обновится. Я действительно не знаю, где еще искать, ищется в течение нескольких часов. Может кто-нибудь, пожалуйста, скажите мне, какую глупую ошибку я делаю? Спасибо, парни!

import UIKit 

class ViewController: UIViewController, UITableViewDataSource { 
//LOAD ARRAY FROM PSSHORTCUTSBOOK.SWIFT 

var PSSCBook = PSShortCutsBook() 

@IBOutlet weak var SCOutlet: UISegmentedControl! 
@IBOutlet weak var SCtableviewOutlet: UITableView! 

@IBAction func SCAction(sender: AnyObject) { 

    if SCOutlet.selectedSegmentIndex == 1 { 
     var PSSCBook = PSShortCutsBook() 
     println("There are \(PSSCBook.shortCutsPS.count) items in this Array") 
     self.SCtableviewOutlet.reloadData(); 
    } else { 
     var PSSCBook = PSShortCutsBook2() 
     println("There are \(PSSCBook.shortCutsPS.count) items in this Array") 
     self.SCtableviewOutlet.reloadData(); 
    } 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 2 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if section == 0 { 
     return PSSCBook.shortCutsPS.count 
    } else { 
     return PSSCBook.shortCutsPS2.count 
    } 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = tableView.dequeueReusableCellWithIdentifier("PSCell", forIndexPath: indexPath) as! UITableViewCell 

    if indexPath.section == 0 { 
     let (shortCutTitle,shortCutKey) = PSSCBook.shortCutsPS[indexPath.row] 
     cell.textLabel?.text = shortCutTitle 
     cell.detailTextLabel?.text = shortCutKey 
    } else { 
     let (shortCutTitle,shortCutKey) = PSSCBook.shortCutsPS2[indexPath.row] 
     cell.textLabel?.text = shortCutTitle 
     cell.detailTextLabel?.text = shortCutKey 
    } 
    /* var PSIcon = UIImage(named: "PSIcon") 
    cell.imageView?.image = PSIcon */ 
    return cell 
} 

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    if section == 0 { 
     return "Tools" 
    } else { 
     return "Help" 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


}