2012-09-01 12 views
9

का कारण है वर्तमान में मेरे पास दो व्यू नियंत्रकों के साथ एक एप्लिकेशन है। पहला एक एम्बेडेड टेबल व्यू वाला दृश्य नियंत्रक है जिसमें गतिशील कोशिकाएं होती हैं। दूसरा स्थैतिक कोशिकाओं के साथ एक टेबल व्यू नियंत्रक है। यदि मैं स्थिर तालिका दृश्य नियंत्रक (पुश या मॉडल शैली सेटिंग का उपयोग करके) में गतिशील तालिका की कोशिकाओं में से किसी एक को चुनने से एक सेग्यू जोड़ता हूं, तो मैं देख सकता हूं कि segue अपेक्षा के अनुसार काम करता है।स्थैतिक सेल UITableView के लिए पॉपओवर सेग्यू संकलन त्रुटि

Couldn't compile connection: <IBCocoaTouchOutletConnection:0x4004c75a0 <IBProxyObject: 0x400647960> => anchorView => <IBUITableViewCell: 0x400f58aa0>> 

किसी और को इस मुद्दे में भाग गया है, या किसी को पता है क्या यह त्रुटि संदेश मतलब हो सकता है: हालांकि, जब मैं पॉपओवर लिए शैली बदलने मैं निम्नलिखित संकलन त्रुटि मिलती है? यह अजीब लगता है कि यह संकलन समय पर हो रहा है जब तक कि एक स्थिर तालिका दृश्य नियंत्रक पॉपओवर में समर्थित नहीं है ...

उत्तर

15

मुझे पता चला कि यह कैसे करें। आप स्टोरीबोर्ड से इसे हुक नहीं कर सकते लेकिन इस तरह प्रोग्राम के रूप में यह कर सकते हैं:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" 
               bundle:nil]; 
    UITableViewController *detailController = [sb instantiateViewControllerWithIdentifier:@"TableSettingDetails"]; 

    self.popoverController = [[UIPopoverController alloc] initWithContentViewController:detailController]; 

    self.popoverController.popoverContentSize = CGSizeMake(320, 416); 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [self.popoverController presentPopoverFromRect:cell.bounds inView:cell.contentView 
          permittedArrowDirections:UIPopoverArrowDirectionAny 
              animated:YES]; 
} 

बस सुनिश्चित करें कि आप अपने नियंत्रक में अपने पॉपओवर के लिए एक संदर्भ है कि बनाने के लिए, अन्यथा यह तुरंत निपटारा हो जाएगा - कुछ अन्य के कारण दिलचस्प अपवाद

+0

जितना मैं स्टोरीबोर्ड (आईबी) में ऐसा करना पसंद करूंगा, इसने मेरे लिए एक इलाज किया, धन्यवाद! – Joe

+0

बहुत उपयोगी पोस्ट! धन्यवाद – Rahul

+0

बहुत उपयोगी के रूप में उपरोक्त, लेकिन अब आईओएस 10 में मान्य नहीं है - मैंने प्रासंगिक आईओएस 10 कोड को एक अलग उत्तर के रूप में जोड़ा है, लेकिन यदि आप इसे स्वीकृत उत्तर में शामिल करना चाहते हैं, तो @ lehn0058, आगे बढ़ें, और मैं मेरा जवाब हटा दूंगा। – Grimxn

2

आपको उस पॉपओवर के लिए एक एंकर पॉइंट चुनना है जो स्थैतिक सेल नहीं है। मेरा सुझाव है कि UIButton सेट को अदृश्य (कस्टम प्रकार) सेट करना है। फिर पॉपओवर सेगु का चयन करें और उस बटन पर एंकर कनेक्शन खींचें।

+0

पॉपओवर के लिए एंकर पॉइंट गतिशील कोशिकाओं में से एक है। उस सेल को टैप करना स्थिर सेल तालिका के साथ पॉपओवर लाता है। – lehn0058

+0

मुझे लगता है कि मुख्य दृश्य में एक बटन जोड़ना और सेटिंग करना क्योंकि एंकर संकलन त्रुटि से छुटकारा पाता है, लेकिन फिर मेरा पॉपओवर तालिका में सही सेल को इंगित नहीं करता है। सेल को बटन पर ले जाने से एक ही संकलन त्रुटि फिर से होती है। – lehn0058

+0

इस समय, आप एक स्थिर तालिका दृश्य कक्ष में एक पॉपओवर एंकर नहीं कर सकते हैं। –

0

मुझे पता है कि यह पहले से ही उत्तर दिया गया है, लेकिन बस इसे मददगार है, इसके लिए मुझे समाधान है जबकि स्टूडियो का उपयोग करके स्टोरीबोर्ड प्रवाह को संरक्षित किया जाता है। आप इसे यहां देख सकते हैं Is it possible to perform a Popover Segue manually (from dynamic UITableView cell)?

0

आईओएस 10 के रूप में, @ lehn0058 का सही और स्वीकार्य उत्तर अब काम नहीं करता है। यहां उनका समाधान आईओएस 10 के लिए अपडेट किया गया है ...

override func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) { 
    // *** Next line doesn't work with popover, only full screen detail 
    //self.performSegue(withIdentifier: "editRow", sender: self) 
    // Hence, do it by hand... 
    let sb = UIStoryboard(name: "Main", bundle: nil) 
    let detailVC: MyDetailViewController = sb.instantiateViewController(withIdentifier: "itemEditor") as! MyDetalViewController 
    detailVC.modalPresentationStyle = .popover 
    detailVC.popoverPresentationController?.sourceView = tableView.cellForRow(at: indexPath) 
    detailVC.detailItem = self.itemAtIndexPath(indexPath) 

    self.present(detailVC, animated: true, completion: {}) 
} 
संबंधित मुद्दे