Làm cách nào để tôi thực hiện tác vụ này? Về cơ bản, tôi sẽ có một mảng "giây int" được liệt kê bên trong UITableView. Vậy làm thế nào tôi có thể gán cho mỗi "giây int" để đếm ngược về 0? Các vấn đề có thể xảy ra mà tôi thấy là các bộ hẹn giờ không được cập nhật khi ô chưa được tạo. Và làm thế nào để tôi khởi tạo nhiều NSTimer độc lập cập nhật các phần tử ui khác nhau? Tôi khá lạc lõng ở đây, nên mọi lời đề nghị đều được đánh giá rất cao. cho các mục đích thị giác, tôi muốn có một cái gì đó như thế này:nhiều bộ đếm thời gian đếm ngược bên trong uitableview
Trả lời
Từ hình ảnh, có vẻ như mô hình của bạn là tập hợp các hành động mà người dùng dự định thực hiện. Tôi sẽ sắp xếp mọi thứ theo cách này:
1) MyAction là NSObject có tên và ngày đến hạn. MyAction thực hiện một cái gì đó như thế này:
- (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 giữ một tay cầm với mô hình đó là một NSArray của MyActions, nó cũng có một NSTimer (chỉ một) mà nói với nó thời gian đã qua.
// 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];
}
Để có công cụ UI ưa thích trong bảng như vậy, bạn có thể muốn phân lớp UITableViewCell và tạo ra một bộ đếm thời gian như một thuộc tính trong mỗi người. Các tế bào sau đó có thể sở hữu một đại biểu đáp ứng với TimerWentOff và xử lý chuông của một báo động hoặc thông báo hoặc whatnot. Mỗi bộ hẹn giờ sẽ cập nhật nhãn trong ô của nó.
Hy vọng rằng sẽ giúp ích một chút. Nếu bạn có câu hỏi cụ thể hơn, hãy cho tôi biết.
Cảm ơn! Tạo ra các tế bào tùy chỉnh là không có vấn đề, tôi đã có điều đó. Vì vậy, phần này "Các tế bào sau đó có thể sở hữu một đại biểu" đây là phần tạo ra đồng hồ đếm ngược? Tôi có nên đặt các nstimers trong một mảng và truy cập một phương thức để cập nhật các nhãn trong ô của tôi không? – Diffy
cảm ơn anh bạn! nhãn này sẽ như thế nào (cell.textLabel.text = [myAction timeRemainingString];) được cập nhật mỗi lần đánh dấu? làm thế nào để bạn gọi nó mỗi giây? – Diffy
np. bạn sẽ thiết lập bộ điều khiển xem của bạn để trở thành "đại biểu" và "nguồn dữ liệu" của bảng (tôi đã đề cập đến điều đó). khi bọ ve xảy ra, bạn yêu cầu bảng của bạn tải lại dữ liệu của nó. bàn sẽ chăm sóc phần còn lại. nó gọi lại cho bạn để hỏi có bao nhiêu ô cần tải và định cấu hình từng ô - cả hai phương pháp được nêu trong mã tôi đã cung cấp. – danh
okay Tôi đã nhận nó hoạt động .. bây giờ tôi đang cố gắng thay đổi phương thức timeRemainingString - (NSString *) của bạn thành - (NSString *) timeRemainingString: (NSTimeInterval) secondsRemaining để tôi có thể chuyển mảng của tôi trong vài giây thay vì giá trị cố định. Làm thế nào để giữ một tham chiếu về giá trị đó để nó sẽ khấu trừ 1 giây mỗi lần bảng được nạp lại? – Diffy