NSUserDefaults更改后,UITableView和UITableViewCell未更新

时间:2015-12-13 08:04:11

标签: ios iphone swift uitableview cells

我正在做一个应用程序,允许用户在应用程序的主视图控制器上更改背景颜色和UITableViewCells的字体。正如您可能猜到的,此更改已在应用程序的设置页面上设置,当我从设置页面导航回主视图时,更改未发生。例如,如果表格视图单元格的背景为蓝色,并且我将其更改为红色,则只有在多任务处理时杀死应用程序并恢复它或者滚动表格视图时才会发生。

我现在不知道该做什么,这是我的代码,任何建议都会非常感激。

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return CoreDatos.count
}

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

    let cell = tableView.dequeueReusableCellWithIdentifier("MensajeUsuario", forIndexPath: indexPath) as! TableViewCell
    cell.selectionStyle = .None
    let mensaje = CoreDatos[indexPath.row]
    cell.textLabel!.text = mensaje.valueForKey("name") as? String
    cell.textLabel?.backgroundColor = UIColor.clearColor()

    cell.delegate = self
    cell.toDoItem = mensaje
    return cell
}


 func colorForIndex(index: Int) -> UIColor {

    var ud: NSUserDefaults = NSUserDefaults.standardUserDefaults()
    var eleccion: Int = ud.integerForKey("Color")
    let itemCount = CoreDatos.count - 1
    let val = (CGFloat(index) / CGFloat(itemCount)) * 0.6
    var esquema = UIColor()


        switch eleccion
        { case 1 : esquema = UIColor(red: val , green: 0.2 , blue: 0.9 , alpha: 1.0)//HeadApp
          case 2 : esquema = UIColor(red: 0.0 , green: val , blue: 1.0 , alpha: 1.0)//Blue
          case 3 : esquema = UIColor(red: 1.0 , green: val , blue: val , alpha: 1.0)//Red
          case 4 : esquema = UIColor(red: val , green: 0.75 , blue: 0.0 , alpha: 1.0)//Green
          case 5 : esquema = UIColor(red: 0.8 , green: val , blue: 0.75 , alpha: 1.0)//Pink
          case 6 : esquema = UIColor(red: 0.5 , green: val , blue: 1.0 , alpha: 1.0)//Violeta
          case 7 : esquema = UIColor(red: 0.9 , green: 0.9 , blue: 0.9 , alpha: 1.0)//White
          default : esquema = UIColor(red: val , green: 0.2 , blue: 0.9 , alpha: 1.0)//HeadApp

        }


    return esquema  }

func tableView(tableView: UITableView, willDisplayCell cell:     UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) {
        cell.backgroundColor = colorForIndex(indexPath.row)
}

前者是表视图的方法,在索引的颜色中我使用NSUserDefaults来读取用户的选择。

我现在没有调用重新加载视图的方法来查看更改。

此时我真的不知道该怎么做,任何帮助请我真的很感激。

1 个答案:

答案 0 :(得分:1)

你可以打电话

tableView.reloadData()

viewDidAppear

您的tableview未更新的原因是它与您在viewDidLoad中设置的状态相同。更改设置后,它仍然与从设置导航时不再调用viewDidLoad相同。虽然从设置导航时将调用viewDidAppear。

  

如果我在多任务处理中杀死应用程序并恢复它,或者如果我滚动它   表格视图。

杀死该应用会再次调用viewDidLoad&加载最新值。 滚动还会在单元格中加载最新数据,因为

cellForRowAtIndexPath

将被称为&加载更新的值。