2013-09-26 49 views
5

Giao diện 'vuốt để xóa' mới trong iOS 7 đã thêm hiệu ứng 'thoát' khi UITableViewCell tiếp tục bù đắp sau khi vuốt. Có cách nào để vô hiệu hóa thư bị trả lại này, vì vậy ô có dừng lại một khi nút xóa hoàn toàn hiển thị không?Làm thế nào để loại bỏ UITableViewCell swipe để xóa thư bị trả lại

di động mà tiếp tục bù đắp:

Tôi muốn các tế bào để dừng lại ở đây ngay cả khi kéo tiếp tục:

enter image description here

Tôi cố gắng này trong phương pháp cellForRowAtIndexPath: của tôi, nhưng không có vẻ thay đổi.

for(UIView *subview in cell.subviews){ 
    if([subview isKindOfClass:[UIScrollView class]]){ 
     UIScrollView *theScrollView = (UIScrollView *)subview; 
     theScrollView.bounces = NO; 
    } 
} 
+0

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ì. –

+0

@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

Trả lời

4

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); 
    } 
} 
1

Tôi không nghĩ rằng có một tùy chọn cho điều đó nhưng có lẽ những gì bạn có thể làm là lớp con di động của bạn và trong didTransitionToState: bạn có thể phát hiện tình trạng xác nhận xóa.

Hiện tại tại thời điểm này, bạn không hoàn toàn chắc chắn mình có thể làm gì để ngăn cuộn nhưng tôi hy vọng điều này sẽ đưa bạn đi đúng hướng.

Có thể bạn có thể tắt trình nhận dạng cử chỉ của ô ở trạng thái này?

Các vấn đề liên quan