簡體   English   中英

無法設置不可重復使用的UITableView單元格中的UILabel文本

[英]UILabel text in non-reusable UITableView cell can't be set

我決定在項目中使用不可重用的自定義UITableView單元,因為我在每個單元中運行一個計時器,並用可重用的單元更新一個單元的計時器會重置所有計時器。 實際上,計時器正在我的視圖控制器中運行,但是輸出顯示在單元格中。 但是,這個問題更為基本:為什么單元格中的UILabel中的文本不更新? 我在IB中設置了2個插座:nameLabel和timeLabel,並將它們連接到單元的頭文件,並且IB顯示連接的插座。 但是,即使嘗試將文字字符串移動到UILabel文本字段中,也會導致“ nil”。 我懷疑我所做的事情基本上是錯誤的,但我無法弄清楚。 使用可重復使用的單元時沒有問題。 這是代碼的一部分,它分配並初始化一個可變數組來保存單元格,添加一個單元格,然后嘗試將文字字符串移入其中。 在NSLog語句中設置斷點將顯示cell.nameLabel.text為'nil'。 任何幫助將不勝感激! 我已經閱讀了UITableViewCell參考資料和編程指南,但它們僅討論使用可重用單元格。 我認為將reuseIdentifier設置為“ nil”會得到不可重用的單元格,但我不確定。

    -(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 =@"cell";
        NSLog(@"addTableViewCell cell= %@", cell);

        [_myTableViewCells addObject:cell];

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

}

在這里輸入代碼

我想我沒有在xib文件中設置委托。 該代碼現在可以正常工作。

    - (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];


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM