动态UITableViewTable和IBOutlets

时间:2015-10-13 14:32:14

标签: ios objective-c uitableview

不允许在UITableViews中重复播放内容。我们无法在TableViewController中将UILabel连接为IBOutlet。我们当然可以将TableViewCell子类化,并在调用cellforRow ...时设置一些值。

但是,当需要处理事件时,我们如何处理这种情况?例如,我有一个通过IBAction发送新日期的UIDatePicker。

- (IBAction)dateChanged:(UIDatePicker *)sender {

    //how can I set the value of the sender in a UILabel?

}

每次用户修改UI元素时都会触发dataChanged,但是我不知道如何将值传递给我的UILabel,因为我没有为该标签设置IBOutlet。在静态单元格中,我有一个IBOutlet(myTxtLabel)和什么时候 更改日期我用

保存值
  

self.myTxtLabel = sender.value

我们如何在动态UITableViews中处理这种情况?

2 个答案:

答案 0 :(得分:1)

如果我正确地阅读了您的问题,您需要更改日期,然后将更改日期反映在所有具有日期的UITableView单元格中,但问题是因为重复了内容,它不能有出路。

所以,这就是我要做的事情。保留日期的属性,当用户更改日期时,在更改日期后调用的方法中,调用self.tableView reloadDataself.tableView reloadRowsAtIndexPath:withAnimation:以仅更新这些行。然后,在cellForRowAtIndexPath:中使用该属性将日期设置为正常,因此当您调用reloadData时,它会自动更新。

答案 1 :(得分:0)

这是我对此的看法:

第1步:通过继承UITableViewCell创建自定义单元格。

第2步:将tag上的UIDatePicker属性设置为行号的值。

第3步:tag方法调用中从dateChanged:属性中获取行号。

第4步:使用行号获取单元格并更新其上的标签:

- (IBAction)dateChanged:(UIDatePicker *)sender {
    NSInteger rowNumber = sender.tag;
    NSIndexPath *pickerRow = [NSIndexPath indexPathForRow:rowNumber inSection:0];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:pickerRow];
    cell.myLabel.text = @"the updated text";
}