2014-08-30 2 views
-3

Я создаю приложение, в котором я нажимаю кнопку, и запускает 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]; 
} 

}

+0

«Я не могу сделать это без прогона таймера в каждой клетке.» Но вы не показываете, что вы делаете. Я имею в виду, что абстрактно, как это сделать, очевидно, что вам нужно сделать, это исправить то, что вы уже делаете, чтобы оно предназначалось для определенного ярлыка. Так почему вы не показываете, что делаете, если хотите помочь? – matt

+0

Эй, @Ares проверить мой ответ. ,,, –

+0

Эй @matt! Извини за это. Я добавил необходимый код. Я думал, что мой вопрос сначала был общим, но теперь, когда я смотрю на него, это не так. Это специфично, поэтому я добавил код. – Ares

ответ

-1

Вы можете использовать - (UITableViewCell *) cellForRowAtIndexPath: indexPath (NSIndexPath *)

Построить свой NSIndexPath с секции 0 и ряд, который вы хотите обновить. Затем вы можете получить доступ к каждой метке.

0

Вы хотите создать массив из NSTimer s для каждой строки таблицы, используя schedTimerWithTimeInterval: target: selector: userInfo: repeat: и предоставить NSIndexPath в параметре userInfo. Затем, когда вы вызываете ваш селектор, вы можете проверить, есть ли указательный путь с помощью indexPathsForVisibleRows, и если вы можете получить ячейку, используя cellForRowAtIndexPath. А затем получите ярлык с помощью тега.

-1

Вы должны взглянуть на

-didSelectrowAtIndexPath method. 

Этот метод будет стрелять каждый раз, когда вы нажмете на ячейку прототип в соответствии с его индексом пути.

Если у вашей ячейки есть отдельные теги, вы можете сделать чек или, поскольку все ячейки имеют аналогичное содержимое, то есть вы повторно используете ячейки с использованием идентификатора, тогда все, что вам нужно сделать, это запустить nstimer для этой ячейки в этом метод.

пройти через некоторые примеры для метода, и я надеюсь, что это помогает

Смежные вопросы