Để chỉ chọn ô đầu tiên lần đầu tiên bảng được nạp, người ta sẽ nghĩ rằng việc sử dụng viewDidLoad
là đúng nơi để đi, nhưng, tại thời điểm thực thi đó, bảng không tải nội dung của nó, vì vậy nó sẽ không hoạt động (và có thể làm hỏng ứng dụng vì NSIndexPath
sẽ trỏ đến ô không tồn tại).
Giải pháp thay thế là sử dụng biến cho biết bảng đã được tải trước và thực hiện công việc tương ứng.
@implementation MyClass {
BOOL _tableHasBeenShownAtLeastOnce;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_tableHasBeenShownAtLeastOnce = NO; // Only on first run
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (! _tableHasBeenShownAtLeastOnce)
{
_tableHasBeenShownAtLeastOnce = YES;
BOOL animationEnabledForInitialFirstRowSelect = YES; // Whether to animate the selection of the first row or not... in viewDidAppear:, it should be YES (to "smooth" it). If you use this same technique in viewWillAppear: then "YES" has no point, since the view hasn't appeared yet.
NSIndexPath *indexPathForFirstRow = [NSIndexPath indexPathForRow:0 inSection: 0];
[self.tableView selectRowAtIndexPath:indexPathForFirstRow animated:animationEnabledForInitialFirstRowSelect scrollPosition:UITableViewScrollPositionTop];
}
}
/* More Objective-C... */
@end
Nguồn
2015-10-05 19:40:51
Tôi cũng đang cố gắng để tìm ra cách để làm điều này. Nó cần phải được thiết lập sau khi các hàm UITableViewDataSource đã được gọi để xem bảng có một cái gì đó trong đó. UITableView dường như không có bất kỳ cuộc gọi lại nào kích hoạt sau khi dữ liệu được tải. – jpsimons