私は最終的に解決策を見つけたと思います!カスタムセルを使用すると、そのセルをUIScrollViewDelegate
として設定し、scrollViewDidScroll:
メソッドを実装できます。このメソッドでは、UIScrollViewのcontentOffsetを強制的に特定の値にとどめることができます(これは、 'Delete'ボタンが完全に表示されている場合はcontentOffsetのように見えます)82.0f
を使用しています。このように:
@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);
}
}
これは、単にUIScrollViewDelegate
としてのViewControllerを設定し、設定することにより、カスタムセルを使用せずに行うことができます.H
tableView:cellForRowAtIndexPath
のUIScrollViewのデリゲートは次のようになります。
の.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);
}
}
を削除して、カスタムのためにこれを試してみてください?統合された天気アプリをチェックアウトすれば、それはあなたが望むものと同じことをします、私はしばらくの間これを行う方法を探してきましたが、まだ何もありません。 –
@AlexSaidani - Nope。私は物事を試みてきましたが、まだ解決策はありません。そしてあなたは正しい!私はどこかでそれを見ていたが、どこを覚えていないのか分かっていた。 – hgwhittle