Penso di aver finalmente trovato una soluzione! Utilizzando una cella personalizzata, è possibile impostare quella cella come UIScrollViewDelegate
e implementare il metodo scrollViewDidScroll:
. In questo metodo, puoi forzare il contenutoOffOffset di UIScrollView a rimanere sotto un valore particolare (sto usando 82.0f
perché sembra essere contentOffset quando il pulsante 'Elimina' è completamente visibile). Come questo:
.h
@interface MyCustomCell : UITableViewCell <UIScrollViewDelegate>
.m
-(void)awakeFromNib{
[super awakeFromNib];
for(UIView *subview in self.subviews){
if([subview isKindOfClass:[UIScrollView class]]){
UIScrollView *theScrollView = (UIScrollView *)subview;
theScrollView.delegate = self;
}
}
}
#pragma mark - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
static CGFloat kTargetOffset = 82.0f;
if(scrollView.contentOffset.x >= kTargetOffset){
scrollView.contentOffset = CGPointMake(kTargetOffset, 0.0f);
}
}
Questo può essere fatto anche senza l'utilizzo di una cella personalizzato, semplicemente impostando un ViewController come UIScrollViewDelegate
e impostando la Delegato di UIScrollView in tableView:cellForRowAtIndexPath
così:
.h
MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate>
.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
for(UIView *subview in cell.subviews){
if([subview isKindOfClass:[UIScrollView class]]){
UIScrollView *theScrollView = (UIScrollView *)subview;
theScrollView.delegate = self;
}
}
return cell;
}
#pragma mark - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
static CGFloat kTargetOffset = 82.0f;
if(scrollView.contentOffset.x >= kTargetOffset){
scrollView.contentOffset = CGPointMake(kTargetOffset, 0.0f);
}
}
Hai preso questo lavoro? Se controlli l'app meteo integrata fa la stessa cosa di quello che vuoi, ho cercato come farlo per un po 'ora non ho ancora ottenuto nulla. –
@AlexSaidani - No. Ho provato cose ma ancora nessuna soluzione. E hai ragione! Sapevo di averlo visto da qualche parte ma non riuscivo a ricordare dove. – hgwhittle