使用 cell 属性 滚动到 UITableView 中的特定单元格

Scroll to specific cell in UITableView with cell property

我有一个 UITableViewCell 的例子如下:

//
//  ItemTableViewCell.h
//
#import <UIKit/UIKit.h>

@interface ItemTableViewCell : UITableViewCell

@property (weak, nonatomic) NSString *itemId;

@end

在我的 UIViewControllerUITableView 中,我有以下分配:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSManagedObject *row = [self.itemsFRC objectAtIndexPath:indexPath];
    ItemTableViewCell *cell = (ItemTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:@"cellId" forIndexPath:indexPath];

    cell.itemId = [row valueForKey:@"item_id"];
}

现在,我如何滚动到 UITableView 中的特定单元格及其单元格 属性 itemId

注意:我非常希望不要使用 indexPathForRow 方法。

您应该执行以下操作:

  1. 通过item_id
  2. 找到NSManagedObject
  3. NSFetchedResultsController
  4. 中获取找到的对象的 indexPath
  5. 滚动 tableView 到那个 indexPath

参见下面的代码示例:

- (void) scrollToRowWithItemID: (NSString *) itemID {
    NSArray *fetchedObjects = self.itemsFRC.fetchedObjects;
    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"item_id == %@", itemID];
    NSArray *filteredArray = [fetchedObjects filteredArrayUsingPredicate: predicate];
    NSIndexPath *indexPath = [self.itemsFRC indexPathForObject: filteredArray.firstObject];
    [self.tableView scrollToRowAtIndexPath: indexPath atScrollPosition: UITableViewScrollPositionNone animated: true];   
}