Tôi nghĩ cuối cùng tôi đã tìm được giải pháp! Sử dụng ô tùy chỉnh, bạn có thể đặt ô đó làm UIScrollViewDelegate
và triển khai phương thức scrollViewDidScroll:
. Trong phương thức đó, bạn có thể buộc contentOffset của UIScrollView ở dưới một giá trị cụ thể (tôi đang sử dụng 82.0f
vì đó có vẻ là contentOffset khi nút 'Xóa' hiển thị đầy đủ). Như thế này:
.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);
}
}
này cũng có thể được thực hiện mà không sử dụng một tế bào tùy chỉnh bằng cách đơn giản thiết lập một ViewController như một UIScrollViewDelegate
và thiết lập Đại diện của UIScrollView tại tableView:cellForRowAtIndexPath
như sau:
.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);
}
}
Bạn đã làm việc này? Nếu bạn kiểm tra các ứng dụng thời tiết tích hợp nó làm điều tương tự như những gì bạn muốn, tôi đã được tìm cách làm điều này trong một thời bây giờ vẫn không có gì. –
@AlexSaidani - Không. Tôi đã thử mọi thứ nhưng vẫn không có giải pháp. Và bạn nói đúng! Tôi biết tôi đã nhìn thấy nó ở đâu đó nhưng không thể nhớ ở đâu. – hgwhittle