我想我終於找到了解決方案!使用自定義單元格,可以將該單元格設置爲UIScrollViewDelegate
並實施scrollViewDidScroll:
方法。在該方法中,您可以強制UIScrollView的contentOffset保持特定值(我使用的是82.0f
,因爲在「刪除」按鈕完全可見時,它似乎是contentOffset)。就像這樣:
.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);
}
}
這也可以不使用自定義單元格通過簡單地設置一個視圖控制器作爲UIScrollViewDelegate
和設置完成UIScrollView的代表tableView:cellForRowAtIndexPath
像這樣:
.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 - 沒有。我一直在嘗試,但仍然沒有解決方案。你說得對!我知道我曾經在某個地方看過它,但卻不記得在哪裏。 – hgwhittle