मैं कुछ समय पहले एक ही समस्या में भाग गया और मुझे कोई समाधान नहीं मिला। जबकि मैंने इस जवाब को एक स्पष्टीकरण के साथ शुरू किया, यह क्यों नहीं किया जा सकता है, मुझे वास्तव में पता चला कि यह कैसे किया जा सकता है! :-)
संक्षेप में: आपको UITableViewCell
का कस्टम सबक्लास बनाना होगा। को UILongPressGestureRecognizer
से UITableViewCellReorderControl
संलग्न करने के लिए ओवरराइड करें। प्रोटोकॉल को परिभाषित करें और किसी भी प्रतिनिधि को सूचित करने के लिए जो भी आप ड्रैगिंग स्थिति के बारे में जानना चाहते हैं।
CustomTableViewCell.h:
#import <UIKit/UIKit.h>
@protocol CustomTableViewCellDelegate;
@interface CustomTableViewCell : UITableViewCell {
}
@property (nonatomic, assign) id <CustomTableViewCellDelegate> delegate;
@end
@protocol CustomTableViewCellDelegate
- (void)CustomTableViewCell:(CustomTableViewCell *)cell isDragging:(BOOL)value;
@end
CustomTableViewCell.m:
#import "CustomTableViewCell.h"
@implementation CustomTableViewCell
@synthesize delegate = _delegate;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
[_delegate CustomTableViewCell:self isDragging:YES]; // Dragging started
} else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
[_delegate CustomTableViewCell:self isDragging:NO]; // Dragging ended
}
}
- (void)layoutSubviews {
[super layoutSubviews];
for (UIView *view in self.subviews) {
if ([NSStringFromClass ([view class]) rangeOfString:@"ReorderControl"].location != NSNotFound) { // UITableViewCellReorderControl
if (view.gestureRecognizers.count == 0) {
UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
gesture.cancelsTouchesInView = NO;
gesture.minimumPressDuration = 0.150;
[view addGestureRecognizer:gesture];
}
}
}
}
@end
ध्यान दें, इस कोड किसी भी निजी एपीआई का उपयोग नहीं करता है, तो यह अभी भी एप्पल अपने आंतरिक कार्यान्वयन में परिवर्तन काम करना बंद कर सकता है हो सकता है (यानी UITableViewCellReorderControl
के वर्गनाम को बदलकर)।
स्रोत
2012-03-28 01:08:42
मुझे UITableView.h इंटरफ़ेस में घोषित इन प्रतिनिधि विधियों को नहीं दिखाई देता है। क्या आप कृपया बता सकते हैं कि हम उन्हें कहां पा सकते हैं? – imnk
@mprudhom मुझे कॉलबैक प्राप्त हुए लेकिन वे अनियंत्रित हैं। क्या आपके पास उत्पादन प्रतिनिधि में ये प्रतिनिधि विधियां हैं? क्या यह निजी एपीआई माना जाता है? – Torsten
इन विधियों को वास्तव में UITableView के प्रतिनिधि पर बुलाया जाता है। चूंकि वे अनियंत्रित हैं, इसलिए ऐप्पल उन्हें आईओएस की भावी रिलीज में तोड़ सकता है, लेकिन आईओएस 5 और आईओएस 7 तक, यह अभी भी काम करता है। मुझे अभी पता लगाना है कि ऐप्पल वास्तव में ऐप स्टोर (मुझे शुभकामनाएं, मुझे लगता है) पर प्रकाशित होने के लिए लागू किए गए तरीकों के साथ एक ऐप की अनुमति देगा, लेकिन मुझे नहीं लगता कि इसका कोई अच्छा कारण नहीं है: अगर मैं लागू करता हूं मेरे UIViewController में इन 3 विधियों, और वे दस्तावेज नहीं हैं और वे अंडरस्कोर या जो कुछ भी शुरू नहीं करते हैं, वे मेरे अपने तरीकों से अलग कैसे हैं? – Argentumko