我怎么知道如果一个UITableView包含特定的NSIndexPath?

这是我正在使用的代码:

if (appDelegate.currentMainIndexPath != nil /* && doesPathExistInTableView */) { [tblView scrollToRowAtIndexPath:appDelegate.currentMainIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; appDelegate.currentMainIndexPath = nil; } 

您可以尝试通过以下方式获取UITableViewCell

 - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath; // returns nil if cell is not visible or index path is out of range 

这是完整的代码:

 UITableViewCell *cell = [cellForRowAtIndexPath:appDelegate.currentMainIndexPath]; if (appDelegate.currentMainIndexPath != nil && cell !=nil) { [tblView scrollToRowAtIndexPath:appDelegate.currentMainIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; appDelegate.currentMainIndexPath = nil; } 

你可以使用这个。 将它传递给indexpath的行和段

 -(BOOL) isRowPresentInTableView:(int)row withSection:(int)section { if(section < [self.tableView numberOfSections]) { if(row < [self.tableView numberOfRowsInSection:section]) { return YES; } } return NO; } 

对Kamran Khan的答案进行了快速的修改:

 extension UITableView { func hasRowAtIndexPath(indexPath: NSIndexPath) -> Bool { return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRowsInSection(indexPath.section) } } 

Swift 4:

 extension UITableView { func hasRowAtIndexPath(indexPath: NSIndexPath) -> Bool { return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRows(inSection: indexPath.section) } } 

如果你的意思是“在索引n有一个单元格”,那么你只需要将你的数据源的大小与n进行比较

 if (appDelegate.currentMainIndexPath != nil [datasource count] > n) { [tblView scrollToRowAtIndexPath:appDelegate.currentMainIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; appDelegate.currentMainIndexPath = nil; } 

数据源例如是一个NSArray。

有一个更方便的方法来判断一个indexPath是否有效:

对于Swift 3.0:

 open func rectForRow(at indexPath: IndexPath) -> CGRect 

对于Objective-C

 - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath; 

如果indexPath无效,您将得到CGRectZero。

 func isIndexPathValid(indexPath: IndexPath) -> Bool { return !tableView.rectForRow(at: indexPath).equalTo(CGRect.zero) } 

这是你如何做到的:

 indexPath.row < [self.tableView numberOfRowsInSection:indexPath.section] 

在上下文中:

 if (indexPath.row < [self.tableView numberOfRowsInSection:indexPath.section]) { [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; } 

插入到您的代码中:

 if (appDelegate.currentMainIndexPath != nil && indexPath.row < [tblView numberOfRowsInSection:indexPath.section]) { [tblView scrollToRowAtIndexPath:appDelegate.currentMainIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; appDelegate.currentMainIndexPath = nil; } 

你也可以使用UITableView的numberOfRowsInSection方法。