以下是我正在使用的代码:
if (appDelegate.currentMainIndexPath != nil /* && doesPathExistInTableView */)
{
[tblView scrollToRowAtIndexPath:appDelegate.currentMainIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
appDelegate.currentMainIndexPath = nil;
}
答案 0 :(得分:31)
你可以用它。传递indexpath的行和部分
目标C:
-(BOOL) isRowPresentInTableView:(int)row withSection:(int)section
{
if(section < [self.tableView numberOfSections])
{
if(row < [self.tableView numberOfRowsInSection:section])
{
return YES;
}
}
return NO;
}
斯威夫特3:
func isRowPresentInTableView(indexPath: IndexPath) -> Bool{
if indexPath.section < tableView.numberOfSections{
if indexPath.row < tableView.numberOfRows(inSection: indexPath.section){
return true
}
}
return false
}
答案 1 :(得分:21)
对卡姆兰汗的答案迅速改编:
extension UITableView {
func hasRowAtIndexPath(indexPath: NSIndexPath) -> Bool {
return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRowsInSection(indexPath.section)
}
}
Swift 4:
extension UITableView {
func hasRow(at indexPath: IndexPath) -> Bool {
return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRows(inSection: indexPath.section)
}
}
答案 2 :(得分:3)
有一种更方便的方法来判断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)
}
答案 3 :(得分:2)
如果你的意思是'在索引n处有一个单元格'那么你只需要将数据源的大小与n进行比较
if (appDelegate.currentMainIndexPath != nil [datasource count] > n)
{
[tblView scrollToRowAtIndexPath:appDelegate.currentMainIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
appDelegate.currentMainIndexPath = nil;
}
其中datasource例如是NSArray。
答案 4 :(得分:1)
您就是这样做的:
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;
}
答案 5 :(得分:0)
您也可以使用UITableView的numberOfRowsInSection
方法。
答案 6 :(得分:0)
我在Kamran's answer上进行了迭代:
+ (BOOL)isIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView {
if (!indexPath) {
return NO;
}
if (indexPath.section < [tableView numberOfSections]) {
if (indexPath.row < [tableView numberOfRowsInSection:indexPath.section]) {
return YES;
}
}
return NO;
}
答案 7 :(得分:-6)
您可以尝试通过以下方式获取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;
}