Iphone 向下滚动uitableview至特定日期
我想知道我是否有一个uitable,每个表项的标题是日期和时间。如果我想让表格自动向下滚动到具有特定日期(例如今天的日期)的单元格,我可以知道如何编码吗?我应该在viewDidLoad方法中编写什么代码 这是我的表格代码Iphone 向下滚动uitableview至特定日期,iphone,ios,xcode,ipad,uitableview,Iphone,Ios,Xcode,Ipad,Uitableview,我想知道我是否有一个uitable,每个表项的标题是日期和时间。如果我想让表格自动向下滚动到具有特定日期(例如今天的日期)的单元格,我可以知道如何编码吗?我应该在viewDidLoad方法中编写什么代码 这是我的表格代码 @interface PictureListMainTable : UITableViewController{ IBOutlet UIButton*scroll; } @property (strong, nonatomic) NSManagedObjectCon
@interface PictureListMainTable : UITableViewController{
IBOutlet UIButton*scroll;
}
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSMutableArray *pictureListData;
@property (strong, nonatomic) IBOutlet UIButton*scroll;
- (void)readDataForTable;
-(IBAction)scrolldown:(id)sender;
@end
@synthesize managedObjectContext, pictureListData;
@synthesize scroll;
// When the view reappears, read new data for table
- (void)viewWillAppear:(BOOL)animated
{
// Repopulate the array with new table data
[self readDataForTable];
}
// Grab data for table - this will be used whenever the list appears or reappears after an add/edit
- (void)readDataForTable
{
// Grab the data
pictureListData = [CoreDataHelper getObjectsForEntity:@"Pictures" withSortKey:@"title" andSortAscending:YES andContext:managedObjectContext];
// Force table refresh
[self.tableView reloadData];
}
#pragma mark - Actions
// Button to log out of app (dismiss the modal view!)
- (IBAction)logoutButtonPressed:(id)sender
{
[self dismissModalViewControllerAnimated:YES];
}
#pragma mark - Segue methods
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get a reference to our detail view
PictureListDetail *pld = (PictureListDetail *)[segue destinationViewController];
// Pass the managed object context to the destination view controller
pld.managedObjectContext = managedObjectContext;
// If we are editing a picture we need to pass some stuff, so check the segue title first
if ([[segue identifier] isEqualToString:@"EditPicture"])
{
// Get the row we selected to view
NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
// Pass the picture object from the table that we want to view
pld.currentPicture = [pictureListData objectAtIndex:selectedIndex];
}
}
#pragma mark - Table view data source
// Return the number of sections in the table
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
// Return the number of rows in the section (the amount of items in our array)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [pictureListData count];
}
// Create / reuse a table cell and configure it for display
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Get the core data object we need to use to populate this table cell
Pictures *currentCell = [pictureListData objectAtIndex:indexPath.row];
// Fill in the cell contents
cell.textLabel.text = [currentCell title];
cell.detailTextLabel.text = [currentCell desc];
// If a picture exists then use it
if ([currentCell smallPicture])
{
cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
cell.imageView.image = [UIImage imageWithData:[currentCell smallPicture]];
}
return cell;
}
// Swipe to delete has been used. Remove the table item
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// Get a reference to the table item in our data array
Pictures *itemToDelete = [self.pictureListData objectAtIndex:indexPath.row];
// Delete the item in Core Data
[self.managedObjectContext deleteObject:itemToDelete];
// Remove the item from our array
[pictureListData removeObjectAtIndex:indexPath.row];
// Commit the deletion in core data
NSError *error;
if (![self.managedObjectContext save:&error])
NSLog(@"Failed to delete picture item with error: %@", [error domain]);
// Delete the row from the data source
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
@end
谢谢您必须计算
特定日期的索引XPath
。并使用此委托向下滚动或向上滚动表格视图中的UITableViewCells
[self.tableView scrollToRowatinexpath:indexath atScrollPosition:UITableViewScrollPositionNone动画:否]代码>
如果您知道要使用的UITableViewCells
的位置
[tableView setContentOffset:CGPointMake(0,0) animated:YES];
您必须计算特定日期的indexpath
。并使用此委托向下滚动或向上滚动表格视图中的UITableViewCells
[self.tableView scrollToRowatinexpath:indexath atScrollPosition:UITableViewScrollPositionNone动画:否]代码>
如果您知道要使用的UITableViewCells
的位置
[tableView setContentOffset:CGPointMake(0,0) animated:YES];
首先在UITableView的数据源中查找今天日期或任何其他日期的索引,如下所示:
我假设搜索日期的日期格式
和数据源日期
是相同的
NSInteger index = NSNotFound;
if ([tableViewArray containsObject:dateHere]) {
index = [tableViewArray indexOfObject:dateHere];
}
现在使用scrollToRowAtIndexPath
[yourTableView scrollToRowAtIndexPath:NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:YES];
编辑:根据需要使用这些滚动位置
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
首先在UITableView的数据源中查找今天日期或任何其他日期的索引,如下所示:
我假设搜索日期的日期格式
和数据源日期
是相同的
NSInteger index = NSNotFound;
if ([tableViewArray containsObject:dateHere]) {
index = [tableViewArray indexOfObject:dateHere];
}
现在使用scrollToRowAtIndexPath
[yourTableView scrollToRowAtIndexPath:NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:YES];
编辑:根据需要使用这些滚动位置
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
因为您要处理日期,所以最好创建一个日期数组,并使用dateComponents查找当前日期
在此代码段中,日期是一个NSDate
实例数组
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *today = [NSDate date];
[self.dates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSDate *date = (NSDate *)obj;
NSDateComponents *components = [cal components:NSDayCalendarUnit
fromDate:date
toDate:today
options:0];
if ([components day]==0) {
*stop = TRUE;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
}
}];
编辑:
- (void)viewWillAppear:(BOOL)animated
{
// Repopulate the array with new table data
[self readDataForTable];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd.MMMM - EEEE"];
NSDate *today = [NSDate date];
[pictureListData enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Pictures *picture = (Pictures *)obj;
NSDate *date = [dateFormatter dateFromString:picture.title];
NSDateComponents *components = [cal components:NSDayCalendarUnit
fromDate:date
toDate:today
options:0];
if ([components day]==0) {
*stop = TRUE;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
}
}];
}
因为您要处理日期,所以最好创建一个日期数组,并使用dateComponents查找当前日期
在此代码段中,日期是一个NSDate
实例数组
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *today = [NSDate date];
[self.dates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSDate *date = (NSDate *)obj;
NSDateComponents *components = [cal components:NSDayCalendarUnit
fromDate:date
toDate:today
options:0];
if ([components day]==0) {
*stop = TRUE;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
}
}];
编辑:
- (void)viewWillAppear:(BOOL)animated
{
// Repopulate the array with new table data
[self readDataForTable];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd.MMMM - EEEE"];
NSDate *today = [NSDate date];
[pictureListData enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Pictures *picture = (Pictures *)obj;
NSDate *date = [dateFormatter dateFromString:picture.title];
NSDateComponents *components = [cal components:NSDayCalendarUnit
fromDate:date
toDate:today
options:0];
if ([components day]==0) {
*stop = TRUE;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
}
}];
}
您的数据源中一天是否有多个日期时间?否。每个单元格每天只有一个NSDate数据。谢谢您的数据源中一天有多个日期时间吗?没有。每个单元格每天只有一个NSDate数据。谢谢,我认为你的方法很棒,但我不知道如何把它放在我的代码中。你能教我如何根据我的代码进行调整吗??Thanks@Clarence你能给我看一下图片中“标题”的日期格式吗?这段代码来自表的详细视图。NSDate*currdate=[datepicker date];NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init];[日期格式化程序setDateFormat:@“dd.MMMM-EEEE”];NSString*timeStr=[dateFormatter stringFromDate:currdate];titleField.text=[NSString stringWithFormat:@“%@”,timeStr]@Clarence如果您处理的是日期,最好将它们保存为业务对象中的日期,并在需要显示日期时将其转换为字符串。我已经编辑了我的答案。请看是否可以。谢谢。现在它说没有已知的调用selector Enumerative ObjectsUsingBlock。这是怎么回事?第一行“self-readdatefortable”也有一个错误箭头。我认为你的方法很好,但我不知道如何把它放在我的代码中。你能教我如何根据我的代码进行调整吗??Thanks@Clarence你能给我看一下图片中“标题”的日期格式吗?这段代码来自表的详细视图。NSDate*currdate=[datepicker date];NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init];[日期格式化程序setDateFormat:@“dd.MMMM-EEEE”];NSString*timeStr=[dateFormatter stringFromDate:currdate];titleField.text=[NSString stringWithFormat:@“%@”,timeStr]@Clarence如果您处理的是日期,最好将它们保存为业务对象中的日期,并在需要显示日期时将其转换为字符串。我已经编辑了我的答案。请看是否可以。谢谢。现在它说没有已知的调用selector Enumerative ObjectsUsingBlock。这是怎么回事?第一行“self readdatefortable”也有一个错误箭头。