Wie gehe ich über diese Aufgabe? Grundsätzlich werde ich ein Array von "Sekunden int" in der UITableView aufgelistet haben. Also wie kann ich jedem "Sekunden int" Countdown auf Null zuweisen? Die möglichen Probleme, die ich sehe, sind die Timer, die nicht aktualisiert werden, wenn die Zelle noch nicht erstellt wurde. Und wie instanziiere ich mehrere unabhängige NSTimers, die verschiedene ui-Elemente aktualisieren? Ich bin hier ziemlich verloren, daher werden alle Vorschläge sehr geschätzt. für optische Zwecke, möchte ich so etwas haben:mehrere Countdown-Timer innerhalb von uitableview
Antwort
Aus dem Bild sieht es so aus, als wäre Ihr Modell eine Reihe von Aktionen, die der Benutzer plant. Ich würde die Dinge so arrangieren:
1) MyAction ist ein NSObject mit einem Namen und einem Fälligkeitsdatum. MyAction implementiert etwas wie folgt aus:
- (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 hält ein Handle auf das Modell, das eine NSArray von MyActions ist, hat es auch eine NSTimer (nur eine), die es an der Zeit erzählt ist vorbei.
// 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];
}
Um Phantasie UI-Sachen in der Tabelle so haben, möchten Sie vielleicht UITableViewCell und erstellen Sie einen Timer als Eigenschaft in jeder Unterklasse. Die Zelle kann dann einen Delegierten besitzen, der auf TimerWentOff reagiert und das Klingeln eines Alarms oder einer Benachrichtigung oder dergleichen handhabt. Jeder Timer würde das Etikett in seiner Zelle aktualisieren.
Hoffe, dass hilft ein bisschen. Wenn Sie genauere Fragen haben, lassen Sie es mich wissen.
Danke! Das Erstellen der benutzerdefinierten Zelle ist kein Problem, das habe ich schon. Also, dieser Teil "Die Zelle kann dann einen Delegierten besitzen" ist dies der Teil, der den Countdown-Timer erstellt? Sollte ich die Nstimers in ein Array setzen und auf eine Methode zugreifen, um die Labels in meiner Zelle zu aktualisieren? – Diffy
- 1. UITableView innerhalb von UITableViewCell
- 2. UITableView innerhalb von UICollectionView-Berührungen.
- 3. Zugabe UITableView innerhalb UITableViewCell
- 4. Android CountDownTimer
- 5. CountDownTimer-Dienst
- 6. Dynamic UIImageView Größe innerhalb von UITableView
- 7. IOS: UITextField + UITableView innerhalb von UIScrollView
- 8. Mocking CountDownTimer und Handler
- 9. Android Editierbare CountDownTimer Problem
- 10. Konstruktor CountDownTimer in Klasse CountDownTimer kann nicht auf bestimmte Typen
- 11. Anhalten/Fortsetzen CountDownTimer Android
- 12. UITableView innerhalb UIPickerView in iOS
- 13. Abbrechen CountDownTimer Android Java
- 14. prüft CountDownTimer läuft
- 15. Swift - UITableView innerhalb UIViewController, UITableView Funktionen werden nicht
- 16. Mehrere NfetchedResultsController auf einem UItableView
- 17. Validieren n-Menge von UITextfields innerhalb von UITableView
- 18. Xcode UI Testing - Mehrere UITableView
- 19. Mehrere Sektionen in UITableView einrichten
- 20. Stoppen und starten Sie CountDownTimer
- 21. Android CountDownTimer wird nicht abbrechen
- 22. Android: Fortschrittsbalken über CountDownTimer aktualisieren
- 23. iOS - UILabel + UIActivityIndicatorView innerhalb der UITableView-Abschnittsüberschrift
- 24. Scrolling eine UITableView innerhalb eines UIScrollView
- 25. Wie dynamische Banner innerhalb der UITableView
- 26. Zugriff auf Array innerhalb von Array innerhalb von Array bei UITableView
- 27. iPad - Mehrere UITableView im selben Bildschirm
- 28. iPhone Mehrere UITableView-Steuerelemente auf einer Ansicht
- 29. Mehrere UITableView/Datenquellen - wie geht man an?
- 30. Mehrere Auswahlknopfgruppen innerhalb von Winkel ng-repeat
danke dude! Wie wird dieses Label (cell.textLabel.text = [myAction timeRemainingString];) bei jedem Tick aktualisiert? Wie nennst du es jede Sekunde? – Diffy
np. Sie werden Ihren View-Controller als "delegate" und "datasource" der Tabelle einrichten (das hätte ich erwähnen sollen). Wenn die Ticks auftreten, bitten Sie Ihre Tabelle, ihre Daten neu zu laden. Der Tisch kümmert sich um den Rest. Es ruft Sie zurück, um zu fragen, wie viele Zellen es laden soll, und um jede Zelle zu konfigurieren - beide Methoden, die in dem von mir bereitgestellten Code beschrieben sind. – danh
okay, ich habe es funktioniert .. jetzt versuche ich zu ändern - (NSString *) timeRemainingString-Methode zu - (NSString *) timeRemainingString: (NSTimeInterval) SekundenRemaining, so dass ich meine Array von Sekunden anstelle eines festen Wertes übergeben kann. Wie behalte ich einen Verweis auf diesen Wert, so dass er jedes Mal, wenn die Tabelle neu geladen wird, 1 Sekunde abzieht? – Diffy