2016-07-07 50 views
1

因此,目前我有UITableViewController同时包含UITableView和UIPickerView。用户可以通过使用选择器来选择如何过滤表中的数据。目前,当在拾取装置中排用户滚动,表的更新,我这是怎么做到了这一点:是否有可能同时动画UIPickerView和UITableview

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

    // Code to update table data... 

    self.tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation:UITableViewRowAnimation.Automatic) 
    self.tableView.endUpdates() 
    return title 
} 

不幸的是,表中没有时reloadSections()被调用动画。我的猜测是,这是因为我无法动画滚动选取器并同时重新加载表格。

我该如何去动画两个同时? 谢谢。

回答

0

基本上,我认为它可以正常工作。 我一次也使用了这样的代码片段,它也没有工作。我记得我解决它通过拖动的UITableView的出口到ViewController,然后调用

@IBOutlet weak var myTableView: UITableView? 

    ... 


func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

    // Code to update table data... 

    self.myTableView.reloadSections(NSIndexSet(index: 0), withRowAnimation:UITableViewRowAnimation.Automatic) 
    self.myTableView.endUpdates() 
    return title 
} 

...因为self.tableView没有明确引用的UITableView你想让它引用。要检查它实际上做 - 你试过用

self.tableView.reloadData() 

更换

self.tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation:UITableViewRowAnimation.Automatic) 

即使它可能不会解决您的问题,我希望这有助于。

+0

感谢您的回答,不幸的是这并没有解决我的问题。我试过你的替换,以测试它是否正确引用,它的确如此。 我认为这可能是因为动画的原因是因为如果我把reloadSections()放在didSelectRow中,它会正确地进行动画。在didSelectRow中,用户已停止滚动,并且在选取器中没有任何动画正在进行。 –

+0

嗯,我忽略了这部分......正如你所提到的,titleForRow(或similiars)函数只会被调用来“初始化”一个单元格,或者当单元格即将被显示时。 所以现在你想更新你的tableView,而UIPickerView是在动画/“旋转”?然后看看这一个:http://stackoverflow.com/a/1511347/5743350 – Muli

+0

是的,你是正确的,我想在选择器旋转时更新表格。我会尝试链接中的解决方案,谢谢!我可以问你在哪里找到有关课程生命周期的细节?你似乎知道的不仅仅是我能从文档中获得的东西。你怎么知道titleForRow只被调用来初始化一个单元? –

相关问题