![](/img/trans.png)
[英]Adding new (non-reusable) cells for every row in UItableview swift
[英]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.