2014-04-27 4 views
5

मैं एक UITableviewUIVIew का एक उपवर्ग के साथ तालिका के एक खंड के शीर्ष पर इतने तरह है,:UIView, केवल स्क्रॉल माध्यम से पारित नहीं टैप करता

-uitable-- |--uiview-| || || || || |---------| | | | | -----------

दृश्य है टेबलव्यू के समान पर्यवेक्षण, लेकिन आंशिक रूप से तालिकादृश्य को शामिल करता है। UIView पर कुछ बटन हैं। मैं चाहता हूं कि उपयोगकर्ता दृश्य पर स्क्रॉल करने में सक्षम हो और बाद में तालिकादृश्य को स्थानांतरित कर सके (जैसे कि वह तालिका पर स्क्रॉल कर रहा था)। लेकिन, अगर वह दृश्य पर एक बटन टैप करता है, तो मैं चाहता हूं कि उस टैप को देखने पर रजिस्टर करें, टेबलव्यू पर नहीं भेजा जाए। अभी, मैंको वापस करने के लिए दृश्य की - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event विधि को ओवरराइड कर रहा हूं, जो स्क्रॉलिंग के लिए काम करता है लेकिन टेबलव्यू पर सभी स्पर्शों को भेजने का प्रभाव है, जिससे मेरे बटन अप्रभावी हो जाते हैं। क्या टेबलब्यू में स्वाइप/पैन जेस्चर को पास करने का कोई तरीका है लेकिन टैप जेस्चर रखें?

धन्यवाद,

+0

आप उस दृश्य को तालिका के रूप में क्यों सेट नहीं कर सकते हैंहेडर व्यू? –

उत्तर

8

के बजाय हमेशा pointInside से नहीं लौटने बिंदु अपने UIButton subviews के किसी भी काटती है, तो देखने के लिए जाँच - और हाँ वापसी अगर यह होता है।

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    for (UIView* sv in self.subviews) 
    { 
     if (CGRectContainsPoint(sv.frame, point)) 
      return YES; 
    } 

    return NO; 
} 

संपादित करें: वैकल्पिक समाधान

अपनी टिप्पणी प्रति आप subview बटन पर एक स्पर्श नीचे के साथ UITableView स्क्रॉल शुरू करने के लिए उपयोगकर्ता चाहते हैं। इस काम को करने के लिए आपको UIView बनाना होगा जिसमें आपके बटन UITableView का सबव्यूव शामिल हैं।

ऐसा करके UIView UITableViewCells के साथ स्क्रॉल करना शुरू कर देगा। इसे रोकने के लिए आपको फ्रेम को समायोजित करने की आवश्यकता है क्योंकि स्क्रॉलिंग होती है, या संभावित रूप से बाधाओं का उपयोग करके इसे स्थानांतरित कर दें।

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    // instantiate your subview containing buttons. mine is coming from a nib. 
    UINib* n = [UINib nibWithNibName: @"TSView" bundle: nil]; 
    NSArray* objs = [n instantiateWithOwner: nil options: nil]; 
    _tsv = objs.firstObject; 

    // add it to the tableview: 
    [self.tableView addSubview: _tsv]; 
} 

// this is a UIScrollView delegate method - but UITableView IS a UIScrollView... 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    [scrollView bringSubviewToFront:_tsv]; 
    CGRect fixedFrame = _tsv.frame; 
    fixedFrame.origin.y = 100 + scrollView.contentOffset.y; 
    _tsv.frame = fixedFrame; 
} 
+0

धन्यवाद टॉम। यह एक मुद्दे को छोड़कर काफी अच्छी तरह से काम करता है। बटन के साथ सामान्य टेबलव्यू पर, यदि आप बटन पर अपनी अंगुली शुरू करते हैं और फिर जल्दी स्क्रॉल करते हैं, तो बटन क्रिया ओवरराइड होती है और स्वाइप पंजीकृत होता है। यदि आपने उपर्युक्त उल्लेख किया है, तो यदि मैं वही काम करने की कोशिश करता हूं, तो स्क्रॉल कभी भी पंजीकृत नहीं होता है। क्या ऐसा करने का कोई तरीका है, शायद नहीं लौटने से यदि स्क्रॉल की गति एक निश्चित मूल्य से तेज है? –

+0

@KyleRosenbluth - मुझे लगता है कि मैं समझता हूं कि आप क्या कर रहे हैं। मैंने इसके लिए खाते का समाधान अपडेट किया। – TomSwift

+0

मैं एक उत्तर बनाने जा रहा था लेकिन टॉम के संपादन ने मुझे इसे हरा दिया। वैसे भी यहां एक गलती है जो दिखाती है कि काम पर: https://gist.github.com/mnmaraes/3dfae9ed353fe49e9d0b – Murillo

संबंधित मुद्दे