2015-09-19 53 views
0

我决定使用不可重复使用的,自定义的UITableView细胞在我的项目,因为我在每个单元上运行一个计时器,并更新一个细胞的定时器可重复使用的细胞复位所有的计时器。实际上,定时器在我的视图控制器中运行,但输出显示在单元格中。但是这个问题更基本:为什么单元格中的UILabel文本没有被更新?我在IB:nameLabel和timeLabel中设置了2个插座,并将它们连接到单元的头文件,IB显示连接的插座。但是,即使试图将字符串移入UILabel文本字段也会导致“无”。我怀疑我正在做一些基本错误的事情,但我无法弄清楚。使用可重复使用的单元时没有问题。以下是分配和初始化可变数组来保存单元格,添加单元格,然后尝试将文字字符串移入其中的代码部分。在NSLog语句中设置断点显示cell.nameLabel.text为'nil'。任何帮助将不胜感激!我已阅读UITableViewCell参考和编程指南,但他们只讨论使用可重用单元。我认为将'reuseIdentifier'设置为'nil'会得到一个不可重用的单元,但我不确定。的UILabel文本不能设置

-(IBAction)addNewItem:(id)sender 
{ 
    // get a new item. 
    NRCItem *newItem = [[NRCItemStore sharedStore] createItem]; 

    // set timerType to 1 (seconds) - default 
    newItem.timerType = 1; 

    // get a timer controller 
    NRCTimerControllerViewController *timerViewController = [[NRCTimerControllerViewController alloc]init]; 

    // set timer controller's item 
    timerViewController.item = newItem; 

    // get a new tableViewCell 

    if(!_myTableViewCells){ 
     _myTableViewCells = [[NSMutableArray alloc]init]; 
    } 

     NRCItemCell *cell = [[NRCItemCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; 
     cell.nameLabel.text [email protected]"cell"; 
     NSLog(@"addTableViewCell cell= %@", cell); 

     [_myTableViewCells addObject:cell]; 

    // push the timerViewController onto the navigation controller's stack 
    [self.navigationController pushViewController:timerViewController animated:YES]; 

} 

输入代码在这里

+1

你可以显示你的'cellForRowAtIndexPath'方法吗?顺便说一句,正确的方法是您需要将您的数据模型从单元中分离出来。例如,使用一个NSNumber数组,每个数字代表一行中的已用时间。在一个定时器方法中更新所有计数,并使用'cellForRowAtIndexPath'来检索显示的单元格并更新它们。 – Paulw11

+0

这是现在正在工作的代码。我不确定发生了什么变化,但也许我没有设置代理来设置标签文本。 –

回答

0

我想我是没有设置在厦门国际银行文件的委托。代码现在正在工作。

- (IBAction)addNewItem:(id)sender 
{ 
    // control comes here when a new item is requested by the user, for example. 
    // by clicking on a button in the view's navigation bar 


    NRCtimerItem *item = [[NRCItemStore sharedStore]createItem]; 


    NRCDetailViewController *controller = [[NRCDetailViewController alloc]init]; 
    self.timerItem = item; 
    self.timerItem.timerSet = NO; 
    self.timerItem.resetHistory = [[NSMutableArray alloc]init]; 
    // Give detail view controller a pointer to the item object in row 
    controller.item = item; 
    controller.timerLabels = self.timerLabels; 
    controller.delegate = self; 

    // Push it onto the top of the navigation controller's stack 
    [self.navigationController pushViewController:controller 
             animated:YES]; 

    // add the row to tableView 
    NSUInteger row =[[[NRCItemStore sharedStore]allItems] indexOfObject:item]; 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0]; 
    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    self.timerItem.timerSet = YES; 
} 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Get a new or recycled cell 
    NRCItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NRCItemCell" forIndexPath:indexPath]; 

    NRCtimerItem *item = [[[NRCItemStore sharedStore]allItems]objectAtIndex:indexPath.row]; 
    self.timerItem = item; 
    if(self.timerItem.timerSet ==NO){ 
     return cell; 
    } 
    // ****************************** 
    else{ 

    [self handleTimer]; 

    return cell; 
    } 
} 
    -(void)handleTimer{ 

    if(self.timerItem.timerSet == NO) 
    { 
    self.timerItem.timerSet = YES; 
     if(self.timerItem.timerReset == NO) 
     { 
      self.timerItem.startTime = [NSDate date]; 
      //self.timerItem.lastReset = [NSDate date]; 
      NSLog(@"Setting current date/time to %@", self.timerItem.startTime); 
     } 
    switch (self.timerItem.timerType) { 
     case 0:// date only 
     { 
      self.timerItem.interval = 0.5; 
     } 
      break; 
     case 1:// seconds 
     { 
      NSTimeInterval timeInterval = 1; 
      self.timerItem.interval = timeInterval; 
     } 
      break; 
     case 2:// minutes 
     { 
      NSTimeInterval timeInterval = 60; 
      self.timerItem.interval = timeInterval; 
     } 
      break; 
     case 3:// hours 
     { 
      NSTimeInterval timeInterval = 3600; 
      self.timerItem.interval = timeInterval; 
     } 
      break; 
     case 4:// days 
     { 
      NSTimeInterval timeInterval = 3600*24; 
      self.timerItem.interval = timeInterval; 
     } 
      break; 
     case 5:// months 
     { 
      NSTimeInterval timeInterval = 3600*24*30; 
      self.timerItem.interval = timeInterval; 
     } 
      break; 
     case 6:// years 
     { 
      NSTimeInterval timeInterval = 3600*24*365; 
      self.timerItem.interval = timeInterval; 

     } 
      break; 
     } 
      NSLog(@"Date/time was set to %@", self.timerItem.startTime); 

      NSTimeInterval interval =[self.timerItem.startTime timeIntervalSinceNow]; 
      interval = (-1 * interval); 
      if(self.timerItem.interval && self.timerItem.interval >= interval){ 
       self.timerItem.interval = self.timerItem.interval - interval; 
      } 
     } 


    //NSLog(@"timer %@ fired", self.timerItem.timerName); 

    // here we schedule the timer to fire after an interval based on the timerType. 
    self.timerItem.timer = [NSTimer scheduledTimerWithTimeInterval:self.timerItem.interval target:self selector:@selector(calculateTimer:) userInfo:self.timerItem repeats:YES]; 



    [self.timerItem.timer fire]; 


}