2012-03-29 12 views
5

このタスクについてはどうすればよいですか?基本的には、私はUITableViewの中にリストされた "秒int"の配列を持っています。だから、どうすればカウントダウンに秒数をゼロに割り当てることができますか?私が見ている可能性のある問題は、セルがまだ作成されていないときにタイマーが更新されないことです。そして、異なるUIエレメントを更新する複数の独立したNSTimersをどのようにインスタンス化するのですか?私はここでかなり失われているので、どんな提案も大歓迎です。視覚的な目的のために、私はこのような何かをしたい:uitableview内の複数のカウントダウンタイマー

enter image description here

答えて

8

画像からは、あなたのモデルがユーザーが取る予定の一連の動作であるように見えます。

1)MyActionは、名前と期日付きのNSObjectです。 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がMyActionsのNSArrayのあるモデルにハンドルを保持し、それはまた、時間が通過していることを伝えます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

ありがとう!このラベル(cell.textLabel.text = [myAction timeRemainingString];)はどのように毎回更新されるのですか?あなたは毎秒それをどのように呼びますか? – Diffy

+0

np。ビューコントローラをテーブルの「デリゲート」と「データソース」に設定します。ティックが発生すると、テーブルにデータの再読み込みを依頼します。テーブルは残りの部分を処理します。それは、ロードする必要があるセル数と、各セルを構成するかを尋ねるコールバックです。 – danh

+0

大丈夫私はそれを働いて..今(NSString *)timeRemainingStringメソッドを(NSString *)timeRemainingString:(NSTimeInterval)secondsRemainingに変更しようとしているので、固定値の代わりに秒の配列を渡すことができます。テーブルがリロードされるたびに1秒を差し引くように、その値の参照を保持するにはどうすればよいですか? – Diffy

0

はそのような表に派手なUIのものを持っているために、あなたはのUITableViewCellのサブクラスを作成し、各プロパティとしてタイマーを作成することもできます。セルは、TimerWentOffに応答し、アラームや通知などの呼び出しを処理するデリゲートを所有できます。各タイマーは、セル内のラベルを更新します。

ほんの少し役に立ちます。より具体的な質問がある場合は、教えてください。

+0

ありがとうございます!カスタムセルを作成することは問題ありません。私はすでにそれを持っています。だから、この部分は "セルは、代理人を所有することができます"これは、カウントダウンタイマーを作成する部分ですか? nstimersを配列に入れて、セル内のラベルを更新する1つのメソッドにアクセスする必要がありますか? – Diffy

関連する問題