2017-04-20 4 views
2

Ich bekomme Millisekunde und möchte diese Millisekunde in Tag, Stunden, Minuten, Sekunde und Anzeige umwandeln und in uiTableview anzeigen lassen. und ich möchte diesen Timer jede Sekunde aktualisieren.wie timer in uitableview zu verwenden?

Ich hatte diesen Code mit uiTableview Delegate-Methode cellForRowAtIndexPath versuchen.

NSInteger totleTime = [[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"_auction_duration"] integerValue]; 


     totleTime = totleTime - timerValue ; 


     long days = (totleTime)/(60 * 60 * 24); 
     long hours = (totleTime - days * 60 * 60 * 24)/(60 * 60); 
     long minuts = (totleTime - days * 60 * 60 * 24 - hours * 60 * 60)/60; 
     long seconds = (totleTime - days * 60 * 60 * 24 - hours * 60 *60 - minuts * 60); 

NSLog(@"seconds : %.f minutes : %.f hours : %.f days : %.f ", seconds, minuts, hours, days); 

Ich hatte diese Methode für Aufrufmethode und Update-Tabellenansicht verwendet. aber es funktioniert nicht so schlagen Sie mir eine andere Option vor oder sagen Sie mir, was ich in diesem Code falsch gemacht hatte.

Antwort

1

Was ich von Ihrer Frage verstehe ist, dass Sie Ihre TabelleView jede Sekunde neu laden möchten. Zuallererst, lassen Sie mich sagen, dass es eine schlechte Idee ist. Wenn Ihr TableView neu geladen wird, kann der Benutzer nichts sehen. Allerdings können Sie einen Timer mit einem bestimmten Intervall verwenden, der eine Methode aufruft. Diese Methode kann entscheiden, wann das TableView erneut geladen werden soll.

EDIT

Von Ihrem letzten Kommentar, ich verstehe, dass Sie in einer Zelle Tableview einen Countdown-Timer angezeigt werden versuchen. Zu diesem Zweck müssen Sie die Tabellenansicht nicht erneut laden. Sie müssen nur die Datenquelle aktualisieren und die Zeile, die den Zähler anzeigt, neu laden. Etwas in dieser Richtung.

Das Code-Snippet ist unten in Swift 2

//Call a method named tick() every second 
let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(tick), userInfo: nil, repeats: true) 

func tick() { 

    //DO YOUR CALCULATIONS HERE TO CALCULATE YOUR DAYS, MINUTES, etc. THEN CALL THE FOLLOWING METHOD 

    tblView.reloadRowsAtIndexPaths([NSIndexPath(forRow: {rowNumber}, inSection: {sectionNumber})], withRowAnimation: .None) 

    //ALSO MAKE SURE YOUR cellForRowAtIndexPath IS CORRECTLY SETTING THE CELL VALUES 
} 

Sie auf invalidate den Timer nicht vergessen, wenn Sie fertig sind mit ihm

+0

Ich habe es versucht, aber bekomme keine richtige Ausgabe –

+0

Kannst du ein bisschen mehr erklären, was genau du probiert hast, was war die erwartete Ausgabe und was war die tatsächliche Ausgabe? – Malik

+0

ich kann diese erhalten Millisekunde: - 5.426.977 und Ausgang ist blove: - Sekunden: 37 Minuten: 29 Stunden: 19 Tage: 62 aber jetzt zeigen Benutzer kann 1. 62: 19: 29: 37 2. 62: 19: 29: 36 3. 62: 19: 29: 35 –

1

ich habe bekommen diese Probleme lösen.

1. Am Anfang hatte ich Timer eingestellt ist 1 Sekunde.

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES]; 

2. Jede zweite Call-Methode und Wert ändern und Tabellenansicht neu laden.

- (void)updateCounter:(NSTimer *)theTimer { 
    timerValue += 1; 
    [ProductListTableView reloadData]; 
} 

3. Berechnen Sie jetzt noch verbleibende Zeit in UITableView deleget Methode cellForRowAtIndexPath

NSInteger totleTime = [[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"_auction_duration"] integerValue]; 


     totleTime = totleTime - timerValue ; 


     long days = (totleTime)/(60 * 60 * 24); 
     long hours = (totleTime - (days * 60 * 60 * 24))/(60 * 60) ; 

     long minuts = (totleTime - (days * 60 * 60 * 24) - (hours * 60 * 60))/60; 
     long seconds = (totleTime - (days * 60 * 60 * 24) - (hours * 60 * 60) - (minuts * 60)); 



     cell.saleTimeLabel.text = [NSString stringWithFormat:@"%@ Sold %ld:%ld:%ld:%ld",[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"sales_qty"], days,hours,minuts,seconds]; 
-1

Ich weiß nicht, ZeitWert die Bedeutungen, wenn ZeitWert Systemzeit übernehmen. Sie können einen Timer schreiben, um die Daten von TableView neu zu laden.