Esiste un modo automatico di essere a conoscenza delle modifiche di ContentSize in UITableView/UIScrollView?UITableView/UIScrollView come sapere automaticamente quando si modifica ContentSize?
risposta
La risposta è in realtà semplice utilizzando KVO (Key Value Observing);
- (id)initWithFrame:(CGRect)frame tableView:(UITableView *)tableView
{
// ....
[self.tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior context:NULL];
// ....
}
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"contentSize"])
{
// Do something
}
}
Non sono ancora sicuro delle bandiere.
So che è stato qualche tempo fa, ma grazie mille! – ryanwils
Ricordatevi inoltre di '-removeObserver: forKeyPath: context:' – titaniumdecoy
Di solito metto '-removeObserver: forKeyPath: context:' nel metodo '-dealloc'. –
Per coloro che non amano KVO:
- (void)setContentSize:(CGSize)contentSize {
[super setContentSize:contentSize];
// Do something.
}
Sì, basta usare super
per accedere al metodo genitore. Questo presuppone che si sottoclassi UIScrollview/TableView/CollectionView
* cosa * deve essere a conoscenza di una modifica della dimensione del contenuto? Gli oggetti "' UITableView' "e" 'UIScrollView'" sono essi stessi o qualcosa che li contiene o qualcos'altro? –