我怎么知道如果一个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
方法。