Я создаю приложение, в котором я нажимаю кнопку, и запускает NSTimer в метке в выбранной ячейке. Я использую одну прототипную ячейку, и в ней есть две метки: имя и время. Эти метки имеют свои собственные теги: 1010 и 1020 соответственно. Фотография ниже - то, как она будет выглядеть во время выполнения. В принципе, я ищу, чтобы запустить таймер в выбранной ячейке. Кажется, я не могу этого сделать, не запуская таймер в каждой ячейке.Измените конкретный UILabel на определенный UITableViewCell
Важно: Ячейки прототипа на фотографии, например, ТОЛЬКО. В моем проекте я использую только одну (1) прототипную ячейку с одним (1) идентификатором.
Спасибо, что нашли время, чтобы прочитать это, и если вы хотите, чтобы я предоставил дополнительную информацию, чтобы помочь вам ответить на этот вопрос, я был бы более чем счастлив сделать это!
Редактировать: Во время выполнения отображаются десять (10) ячеек. Данные NSArrays заполняют данные.
Редактировать 2: Проблема, которую я продолжаю получать, заключается в том, что таймер идет в каждую ячейку. Я пытаюсь понять, как настроить таргетинг на определенную ячейку. Я сохранил номер ячейки. Что я могу сделать с этим?
int cellNumber;
bool isCurrentlyRunning = NO;
- (void)viewDidLoad{
[super viewDidLoad];
//Table Data Code
self.peopleArray = @[@"Person 1", @"Person 2", @"Person 3", @"Person 4", @"Person 5", @"Person 6", @"Person 7", @"Person 8", @"Person 9", @"Person 10"];
self.TimeArray = @[@"0:00", @"0:00", @"0:00", @"0:00", @"0:00", @"0:00", @"0:00", @"0:00", @"0:00", @"0:00", @"0:00"];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.peopleArray count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"SimpleIdentifier"];
UILabel *lblName = (UILabel *)[cell viewWithTag:1010];
UILabel *lblTime = (UILabel *)[cell viewWithTag:1020];
NSString *Name, *Time;
Name = [self.roundOrder objectAtIndex:indexPath.row];
lblTime.text = [self formattedTime:self.currentTimeInSeconds];
lblName.text = Name;
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[_myTimer invalidate];
self.currentTimeInSeconds = 0;
cellNumber = [indexPath row];
}
- (int)timeToStop{
int retVal = 0;
switch (cellNumber) {
case 0:
retVal = 100;
break;
default:
retVal = 200;
break;
}
return retVal;
}
- (NSTimer *)createTimer {
return [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(timerTicked:)
userInfo:nil
repeats:YES];
}
- (NSString *)formattedTime:(int)totalSeconds
{
int seconds = totalSeconds % 60;
int minutes = (totalSeconds/60) % 60;
return [NSString stringWithFormat:@"%d:%02d", minutes, seconds];
}
- (void)timerTicked:(NSTimer *)timer {
_currentTimeInSeconds++;
if (self.currentTimeInSeconds == [self timeToStop]){
[_myTimer invalidate];
}
}
- (IBAction)startCountDown:(id)sender {
if (!_currentTimeInSeconds) {
_currentTimeInSeconds = 0 ;
}
if (!_myTimer) {
_myTimer = [self createTimer];
}
isCurrentlyRunning = YES;
}
- (IBAction)stopCountDown:(id)sender {
if(isCurrentlyRunning == YES){
[_myTimer invalidate];
isCurrentlyRunning = NO;
}else{
if (_myTimer) {
[_myTimer invalidate];
}
_currentTimeInSeconds = 0;
self.lblTimer.text = [self formattedTime:_currentTimeInSeconds];
}
}
«Я не могу сделать это без прогона таймера в каждой клетке.» Но вы не показываете, что вы делаете. Я имею в виду, что абстрактно, как это сделать, очевидно, что вам нужно сделать, это исправить то, что вы уже делаете, чтобы оно предназначалось для определенного ярлыка. Так почему вы не показываете, что делаете, если хотите помочь? – matt
Эй, @Ares проверить мой ответ. ,,, –
Эй @matt! Извини за это. Я добавил необходимый код. Я думал, что мой вопрос сначала был общим, но теперь, когда я смотрю на него, это не так. Это специфично, поэтому я добавил код. – Ares