有没有办法知道何时实际使用 uitableview 上的索引?我在 Apple 文档中找不到任何方法,但我想知道其他人是否知道任何事情。我基本上想在我的表视图中制作一个动画,该动画会根据在索引中选择的部分而变化,我不知道如何在不访问表视图索引的情况下执行此操作。
任何帮助是极大的赞赏。
谢谢。
有没有办法知道何时实际使用 uitableview 上的索引?我在 Apple 文档中找不到任何方法,但我想知道其他人是否知道任何事情。我基本上想在我的表视图中制作一个动画,该动画会根据在索引中选择的部分而变化,我不知道如何在不访问表视图索引的情况下执行此操作。
任何帮助是极大的赞赏。
谢谢。
这不是一个非常优雅的解决方案,但您可以将 UITableView 子类化并在- (void)didAddSubview:(UIView *)subview;
它第一次出现时观察它。这假设它是直接添加到 UITableView 而不是它的子视图或父视图之一,并且您可以将添加的视图识别为索引。也有可能在第一次添加后它会被隐藏并显示,而不是被删除并再次添加。
UITableViewDataSource
委托方法-tableView:sectionForSectionIndexTitle:atIndex:
返回一个NSInteger
代表从节索引中选择的节。在您的数据源委托(可能是您的表视图控制器)的任何类中覆盖此方法。
在视图控制器中设置一个属性,NSInteger
称为selectedSectionIndex
. 它的值是在上述委托方法中设置的。
最后,在视图控制器中设置一个观察者,它等待对该属性的更改,并在观察到更改时触发您想要的代码。
在您的-viewWillAppear:
方法中,例如:
[self addObserver:self forKeyPath:@"selectedSectionIndex" options:NSKeyValueObservingOptionNew context:nil];
在您的-viewWillDisappear:
方法中,取消注册观察者:
[self removeObserver:self forKeyPath:@"selectedSectionIndex"];
这样做很重要,这样该-dealloc
方法就不会引发异常。
最后,设置观察者方法在发生变化时做一些事情selectedSectionIndex
:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqual:@"selectedSectionIndex"]) {
// The section index changed, so trigger some cool animation
}
}
Key-Value Observing 模式是一种很好的通用方法,可以在对象的值在某处发生变化时触发某事。Apple 编写了一个很好的“快速入门”文档来介绍这个主题。