2015-12-08 12 views
5

मैंने कुछ परीक्षण 3D Touch कार्यक्षमता को UITableViewController पर आईफोन 6 एस पर जोड़ा। आम तौर पर यह ठीक काम करता है, लेकिन मैं कुछ 2 समस्याओं का पालन करने में सक्षम था, और मुझे यकीन नहीं है कि क्या हो रहा है और इसे सामान्य तरीके से कैसे ठीक किया जाए।3 डी टच और UITableViewCell

1) मेरा सेल चयन योग्य है, इसलिए उपयोगकर्ता इसे दबा सकता है या "3 डी टच" का उपयोग कर सकता है। समस्या यह है कि जब मैं UITableViewCell के लिए "पॉप" और "पीक" का उपयोग करता हूं तो यह चयनित हो जाता है और मैं setSelected: या setHighlighted: विधियों का उपयोग करके सामान्य तरीके से अचयनित नहीं कर सकता। मैंने presentViewController में previewingContext:commitViewController में भी विभिन्न स्थानों पर इसे अचयनित करने का प्रयास किया। वे अभी कुछ भी नहीं करते हैं और कोशिकाएं अभी भी चयनित राज्य में रहती हैं। मैंने reviewingContext.sourceView और अन्य अस्थायी कोड को कॉल करके चयनित सेल पुनर्प्राप्त किया जिसने मुझे चयनित सेल दिया, लेकिन ये विधियां काम नहीं करतीं।

  • तो सवाल यह है कि वहाँ का चयन रद्द करने (या बेहतर कोई चयन करने के लिए) सेल उपयोगकर्ता उस पर लागू किया जब "पॉप" प्रेस एक सामान्य तरीका है?

2) मैंने यह भी देखा है कि कभी कभी जब मैं अभी नहीं "पॉप" इशारा और राज्य प्रारंभिक सेल लाने (जब previewingContext:viewControllerForLocation विधि भी नहीं बुलाया गया था) मेरी यूआई सिर्फ लटकी हुई है और सब पर छूता है का जवाब नहीं है । मुझे इसे काम करने के लिए मारने की जरूरत है। यह बहुत अजीब लगता है, मैंने इस Tutorial की जांच की। यह बिना किसी मुद्दे के महान काम करता है, लेकिन वे सेल पर नहीं प्रतिनिधि को पंजीकृत करते हैं, लेकिन UITableView पर "पॉप" इशारा पूरे तालिका को हाइलाइट करते हैं, लेकिन सेल नहीं।

  • किसी भी विचारों और यहाँ क्या गलत हो सकता है?

यहाँ कैसे मैं अपने परीक्षण UITableViewController जो पहले से UIViewControllerPreviewingDelegate

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCellWithIdentifier("SomeDemoID", 
     forIndexPath: indexPath) as! UITableViewCell 

    // Some cell configuration 

    if #available(iOS 9.0, *) { 
     if traitCollection.forceTouchCapability == .Available { 
      self.registerForPreviewingWithDelegate(self, sourceView: cell) 
     } 
    } else { // Fallback on earlier versions} 

    return cell; 
} 


// MARK: - UIViewControllerPreviewingDelegate 

    func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? 
    { 
     // Just Test View Controller 
     return UIViewController(nibName: nil, bundle: nil) 
    } 

    func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) 
    { 
     self.presentViewController(viewControllerToCommit, animated: true, completion: nil) 
    } 

धन्यवाद के अनुरूप में 3 डी टच लागू किया है!

उत्तर

0

यह जांचने का प्रयास करें कि आपका पूर्वावलोकन UIViewController पहले से ही आपके previewingContext(_:viewControllerForLocation:) विधि में प्रस्तुत किया गया है या नहीं।

कुछ

तरह
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? 
{ 
    if self.navigationController.presentedViewController.isKindOfClass(PreviewViewController) { 
     return nil 
    } 
    return PreviewViewController() 
} 
1

मैं एक ही मुद्दा देखा। मुझे लगता है कि समस्या डुप्लिकेट पंजीकरण के कारण होती है। मैंने ध्वज जोड़ा तो समस्या ठीक हो गई।

कृपया इसे आज़माएं (मैं उद्देश्य-सी का उपयोग कर रहा हूं, इसलिए कृपया तेज़ी से फिर से लिखें)।

श्रेणी कि

@interface UITableViewCell (FourceTouchRegistered) 

@property (nonatomic, assign) BOOL fourceTouchRegistered; 

@end 

और

#import "UITableViewCell+FourceTouchRegistered.h" 
#import <objc/runtime.h> 

@implementation UITableViewCell (FourceTouchRegistered) 

- (void)setFourceTouchRegistered:(BOOL)fourceTouchRegistered 
{ 
    objc_setAssociatedObject(self, @"fourceTouchRegistered", @(fourceTouchRegistered), OBJC_ASSOCIATION_ASSIGN); 
} 

- (BOOL)fourceTouchRegistered 
{ 
    return [objc_getAssociatedObject(self, @"fourceTouchRegistered") boolValue]; 
} 

@end 

तो

if(cell.fourceTouchRegistered == NO) { 
     cell.fourceTouchRegistered = YES; 
     if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) { 
      [self registerForPreviewingWithDelegate:self sourceView:cell]; 
     } 
    } 
3
  • आसान तरीका tableview कक्ष में 3 डी जोड़ने के लिए छुएं को लागू करें।कोड की एक पंक्ति के बिना

storyboard image

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