несколько таймеров обратного отсчета внутри uitableview - PullRequest
5 голосов
/ 29 марта 2012

Как мне выполнить эту задачу?По сути, у меня будет массив «seconds int», перечисленный внутри UITableView.Итак, как я могу назначить каждые "секунды Int" для обратного отсчета до нуля?Возможные проблемы, которые я вижу, это то, что таймеры не обновляются, когда ячейка еще не создана.И как мне создать несколько независимых NSTimers, обновляющих различные элементы пользовательского интерфейса?Я совершенно заблудился здесь, поэтому любые предложения очень ценятся.для визуальных целей я хочу иметь что-то вроде этого:

enter image description here

Ответы [ 2 ]

8 голосов
/ 29 марта 2012

На рисунке видно, что ваша модель представляет собой набор действий, которые пользователь планирует выполнить.Я бы расставил вещи так:

1) MyAction - это объект NSO с именем и датой исполнения.MyAction реализует что-то вроде этого:

- (NSString *)timeRemainingString {
    NSDate *now = [NSDate date];
    NSTimeInterval secondsLeft = [self.dueDate timeIntervalSinceDate:now];
    // divide by 60, 3600, etc to make a pretty string with colons
    // just to get things going, for now, do something simple
    NSString *answer = [NSString stringWithFormat:@"seconds left = %f", secondsLeft];
    return answer;
}

2) StatusViewController хранит дескриптор модели, которая является NSArray для MyActions, он также имеет NSTimer (только один), который сообщает, что время проходит.

// schedule timer on viewDidAppear
// invalidate on viewWillDisappear

- (void)timerFired:(NSTimer *)timer {
    [self.tableView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.model.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    MyAction *myAction = [self.model objectAtIndex:indexPath.row];

    // this can be a custom cell.  to get it working at first,
    // maybe start with the default properties of a UITableViewCell

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = [myAction timeRemainingString];
    cell.detailTextLabel.text = [myAction name];
}
0 голосов
/ 29 марта 2012

Чтобы иметь такие причудливые элементы пользовательского интерфейса в таблице, как вы, вы можете захотеть создать подкласс UITableViewCell и создать таймер как свойство в каждом. Затем ячейка может иметь делегата, который отвечает на TimerWentOff и обрабатывает сигнал тревоги, уведомления или чего-либо еще. Каждый таймер обновляет метку в своей ячейке.

Надеюсь, это немного поможет. Если у вас есть более конкретные вопросы, дайте мне знать.

...