प्रौद्योगिकी साझेदारी

iOS UITableView स्लाइडिंग इशाराभिः सह आगच्छति तथा च मातापितृदृश्यं स्लाइडिंग इशारा संघर्षप्रतिक्रियातन्त्रस्य अन्वेषणं योजयति

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

दृश्यानि

कदाचित् वयं एतादृशं अन्तरक्रियाशीलं परिदृश्यं प्राप्नुमः : अस्माकं UITableView अस्ति
इदं पॉप-अप विण्डो मध्ये स्थापयन्तु एतत् पॉप्-अप विण्डो स्लाइड् कृत्वा (हस्तेन स्वाइप् कृत्वा) अन्तर्धानं कर्तुं शक्यते ततः एतत् UITableView pop-up विण्डो मध्ये स्थापितं भवति तथा च काञ्चन सामग्रीं प्रदर्शयितुं स्क्रॉल कर्तुं शक्यते उत्पादसूचनाः टिप्पण्याः च (Douyin इत्यस्य टिप्पणी-पॉप-अप-विण्डो-सदृशम्), तथा च अधः स्लाइड्-करणसमये, यदि tableView उपरि स्लाइड्-कृतम् अस्ति, तर्हि भवान् स्लाइडिंग्-इशारस्य प्रतिक्रियां दातुं शक्नोति, पॉप-अप-विण्डो-इत्यस्य अधः स्लाइड्-करणं च निरन्तरं कर्तुं शक्नोति

विचाराः

प्रथमं, अस्माकं pop-up view मध्ये tableView अस्ति कोष्ठ।अतः इदं पॉप-अप-दृश्यं इशाराणां प्रतिक्रियां ददाति प्रॉक्सी अस्ति
चतुष्कोणं च इञ्च

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *)otherIstureRecognizer
    प्रॉक्सी मेथड् इत्यस्मिन् यदि gestureRecognizer स्वस्य स्लाइडिंग् गेस्टर् अस्ति तथा च otherGestureRecognizer tableView इत्यस्य स्लाइडिंग् गेस्टर् अस्ति तर्हि तस्य युगपत् प्रतिक्रियायाः समर्थनं करणीयम्, अर्थात् YES इति प्रत्यागन्तुं तस्मिन् एव समये अस्माकं विचारः आवश्यकः, अर्थात् यदि अस्माकम्‌
    यदा tableView उपरि स्क्रॉलं करोति तदा भवद्भिः tablView इत्यस्य स्क्रॉल इशारं प्रतिक्रियायाः समर्थनं न कर्तुं सेट् कर्तव्यम् अन्यथा, tableView इत्यस्य उपरि स्क्रॉल कृत्वा स्क्रॉलं निरन्तरं भविष्यति यदि भवान् अस्मिन् समये tableView इत्येतत् अग्रे-पश्चात् स्लाइड् करिष्यति cause pop-ups and tableView एकत्रितस्य स्क्रॉलस्य सन्दर्भे एतत् किमपि वयं न इच्छामः, अतः यदा अस्माकं tablView उपरि स्क्रॉल भवति तदा अस्माभिः tableView इत्यस्य pangesture.enabled = NO सेट् कर्तव्यम् ।

द्वय स्वाइप इशारा स्क्रॉल प्रतिक्रिया तन्त्र

वयं pop-up विण्डो मध्ये स्लाइडिंग् इशारान् योजयामः, प्रतिक्रियाविधिः च handlePan अस्ति:
परीक्षणद्वारा वयं तत् प्राप्तवन्तःयदा अस्माकं हस्तः tableView इत्यत्र स्क्रॉल करोति तदा प्रत्येकं वयं निष्पादयामः
tableView इत्यस्य प्रॉक्सी मेथड् scrollViewDidScroll इत्यस्मात् पूर्वं handlePan मेथड् निष्पादितं भविष्यति ।

कृपया चित्रविवरणं योजयन्तु

अपि च, स्वाइप्-काले (यदि हस्तः पटलात् न त्यजति तर्हि स एव स्वाइप् गण्यते),
यदि प्रतिक्रियाविधौ handlePan इत्यत्र सेट् कृतम् अस्ति
self.tableView.panGestureRecognizer.enabled = NO कारणं भविष्यति
self.tableView अस्याः स्लाइडस्य समये स्क्रॉल न करिष्यति, यद्यपि self.tableView.panGestureRecognizer.enabled = YES सेट् कृतः अस्ति ततः परं self.tableView.panGestureRecognizer.enabled = NO, तथापि एतत् स्क्रॉल न करिष्यति ।

एतेन ज्ञायते यत् **स्लाइडिंग् इशारस्य प्रतिक्रियारूपेण self.tableView.panGestureRecognizer.enabled = NO इत्यस्य सर्वोच्चप्राथमिकता अस्ति

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"哈哈哈哈哈这里是执行scrollViewDidScroll self.panNum是%ld", self.panNum);
}

  • 1
  • 2
  • 3
  • 4
  • 5
- (void)handlePan:(UIPanGestureRecognizer *)pan
{
   self.tableView.panGestureRecognizer.enabled = YES;

   NSLog(@"哈哈哈哈哈这是第%ld次响应滑动手势handlePan 方法", self.panNum);
   if (self.panNum % 2 == 0) {
       self.tableView.panGestureRecognizer.enabled = NO;
   } else {
       self.tableView.panGestureRecognizer.enabled = YES;
   }
   self.tableView.panGestureRecognizer.enabled = YES;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

कृपया चित्रविवरणं योजयन्तु

उपर्युक्तपरीक्षायाः सम्पूर्णः कोडः

//
//  LBPangestureController.m
//  TEXT
//
//  Created by mac on 2024/7/7.
//  Copyright © 2024 刘博. All rights reserved.
//

#import "LBPangestureController.h"

@interface LBPangestureController () <UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate>

@property (nonatomic, strong) UITableView *tableView;

@property (nonatomic, strong) UIPanGestureRecognizer *pangesture;

@property (nonatomic, assign) NSInteger panNum;

@end

@implementation LBPangestureController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.tableView];
    [self.view addGestureRecognizer:self.pangesture];
    // Do any additional setup after loading the view.
}


- (void)handlePan:(UIPanGestureRecognizer *)pan
{
    self.tableView.panGestureRecognizer.enabled = YES;

    NSLog(@"哈哈哈哈哈这是第%ld次响应滑动手势handlePan 方法", self.panNum);
    if (self.panNum % 2 == 0) {
        self.tableView.panGestureRecognizer.enabled = NO;
    } else {
        self.tableView.panGestureRecognizer.enabled = YES;
    }
    self.tableView.panGestureRecognizer.enabled = YES;
}

#pragma mark  - UITableViewDelegate, UITableViewDataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row];
    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 100;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 60;
}

#pragma mark - uiscrollViewdelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"哈哈哈哈哈这里是执行scrollViewDidScroll self.panNum是%ld", self.panNum);
}

#pragma mark - gesturedelegate

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if (gestureRecognizer == self.pangesture) {
        self.panNum ++;
    }
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (gestureRecognizer == self.pangesture && otherGestureRecognizer == self.tableView.panGestureRecognizer) {
        return YES;
    }
    return NO;
}

#pragma mark - lazy load

- (UITableView *)tableView
{
    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 100, 300, 400) style:UITableViewStylePlain];
        [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.backgroundColor = [UIColor cyanColor];
    }
    return _tableView;
}

- (UIPanGestureRecognizer *)pangesture
{
    if (!_pangesture) {
        _pangesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
        _pangesture.delegate = self;
    }
    return _pangesture;
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122