2012-08-06 17 views
17

मेरे पास UIViewController है HomeViewController कहा जाता है और इसमें एक मॉडल है जिसमें डेटा की एक सरणी है। HomeViewController में एक बटन भी है जो दबाए जाने पर UITableViewController दिखाएगा जो प्रदर्शित करता है कि मॉडल का डेटा सरणी है।पॉपओवर आकार कहां सेट करें?

मेरा सवाल है, पॉपओवर के आकार को सेट करने के लिए मानक/सर्वोत्तम तरीका क्या है? मैं केवल पॉपओवर डेटा को प्रदर्शित करने के लिए काफी लंबा होना चाहता हूं, लेकिन कोई लंबा नहीं। आम अभ्यास क्या है? मुझे लगता है कि मुझे किसी बिंदु पर contentSizeForViewInPopover सेट करने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि ... viewDidLoad पॉपओवर क्लास की विधि में? prepareForSegue विधि में?

यहाँ कोड मैं अब तक है: (ध्यान दें कि DataPresentingViewController मेरी पॉपओवर दृश्य नियंत्रक class` है)

//In HomeViewController 
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.destinationViewController isKindOfClass:[DataPresentingViewController class]]) 
    { 
     DataPresentingViewController *dest = (DataPresentingViewController *) segue.destinationViewController; 
     dest.mySavedData = self.myModel.mySavedData; 
    } 
} 

मुझे पता है कि मैं सिर्फ prepareForSegue विधि में यहाँ contentSizeForViewInPopover सेट कर सकते हैं; हालांकि, ऐसा लगता है कि पॉपओवर क्लास के साथ सौदा करना चाहिए।

+0

नीचे एक समाधान जोड़ा गया है जो किसी भी तालिका दृश्य आकार के लिए पॉपओवर आकार देने का एक सामान्य तरीका प्रदान करता है। – memmons

उत्तर

21

HomeViewController

+13

-contentSizeForViewInPopover: आईओएस 7 में बहिष्कृत है। उपयोग -setPopoverContentSize: एनिमेटेड: इसके बजाए। – auco

+18

मेरा मानना ​​है कि कॉल के प्रतिस्थापन सेट किया गया है प्रीफर किया गया सामग्री: –

1

ऐसा लगता है कि आप इसे प्रोग्रामेटिक रूप से करना चाहते हैं, लेकिन स्टोरीबोर्ड में, एक दृश्य नियंत्रक को एक सेगु में हुक करने से पहले, गुण निरीक्षक के तहत "पॉपओवर, स्पष्ट आकार विकल्प का उपयोग करें।" शायद आप उस आकार को सेट कर सकते हैं जो आपके ऐप के लिए सबसे अच्छा काम करेगा और कोड का उपयोग करने के साथ आकार के बारे में चिंता न करें। उम्मीद है कि यह मदद करता है, हमें बताएं कि यह कैसे जाता है।

+0

समस्या यह है कि जब भी ऐप चलाया जाता है तो मेरा मॉडल एक अलग आकार होगा, इस प्रकार मैं एक स्पष्ट आकार – Nosrettap

+0

@Nosrettap को इंगित नहीं कर सकता, हाँ, अगर यह बदलता है तो यह बिल्कुल भी काम नहीं करेगा। खैर, सोचा कि मैं कम से कम कोशिश करेंगे। हमें जो कुछ भी करना है उसे पोस्ट करें, मुझे पता लगाना अच्छा लगेगा। – Douglas

3

आज आपके प्रश्न पर ठोकर खाई। क्या आप इसे हल कर चुके हैं?

आप की कोशिश की है:

setPopoverContentSize:<#(CGSize)#> animated:<#(BOOL)#> 
अपने segue तर्क ब्लॉक में

। उपयोगी यदि आप चाहते हैं कि पॉपओवर आकार डेटा सेट के आधार पर परिवर्तनीय हो, या प्लेसमेंट या जो भी हो।

अच्छी तरह से हो।

1

में ViewDidLoad विधि में contentSizeForViewInPopover सेट निम्नलिखित कोड का प्रयास करें: अपने UITableView की ऊंचाई मैच के लिए अपने UIPopoverViewController आकार को

- (IBAction)setData:(id)sender 
{ 
    UIViewController *popoverContent=[[UIViewController alloc] init]; 
    UITableView *tableView=[[UITableView alloc] initWithFrame:CGRectMake(265, 680, 0, 0) style:UITableViewStylePlain]; 

    UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)]; 

    popoverView.backgroundColor=[UIColor whiteColor]; 

    popoverContent.view=popoverView; 
    popoverContent.contentSizeForViewInPopover=CGSizeMake(200, 420);//setting the size 
    popoverContent.view=tableView; 
    tableView.delegate=self; 
    tableView.dataSource=self; 

    self.popoverController=[[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
    [self.popoverController presentPopoverFromRect:CGRectMake(400, 675, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 
} 
1

एक अल्पज्ञात चाल को tableView के rectForSection विधि का उपयोग करने के लिए है आपको ऊंचाई दें इस तरह अपने ViewController के contentSizeForViewInPopover में ऊंचाई का उपयोग करें:

- (CGSize)contentSizeForViewInPopover { 
    // Currently no way to obtain the width dynamically before viewWillAppear. 
    CGFloat width = 200.0; 
    CGRect rect = [self.tableView rectForSection:[self.tableView numberOfSections] - 1]; 
    CGFloat height = CGRectGetMaxY(rect); 
    return (CGSize){width, height}; 
} 
56

iOS7 contentSizeForViewInPopover के रूप में मान्य नहीं है। आपको इसके बजाय UIViewController की preferredContentSize संपत्ति का उपयोग करना चाहिए।

आशा है कि इससे मदद मिलती है!

+1

यदि आपके पास UINavigationController प्रस्तुत करने वाला पॉपओवर है तो यह काम नहीं करता है। मेरा दूसरा दृश्य नियंत्रक इस मान को रीसेट कर रहा है लेकिन यह समायोजित नहीं होगा। यह किसी कारण से केवल रूट व्यू कंट्रोलर का मान लेता है। – LightningStryk

+2

यह मान आईबी में भी सेट किया जा सकता है: ** व्यू कंट्रोलर के गुण इंस्पेक्टर ** '>> 'सामग्री का आकार' >> '** प्रयुक्त पसंदीदा स्पष्ट आकार ** – Besi

+0

यह उत्तर वास्तव में स्वीकार किया जाना चाहिए। – tomas789

6

contentSizeForViewInPopover iOS 7 में
संपत्ति बहिष्कृत हो गई है: UIPopoverController की popoverContentSize कि UIPopoverController की contentViewController संपत्ति में दृश्य नियंत्रक द्वारा किया जाता है सामग्री दृश्य के आकार का प्रतिनिधित्व करता है।
Reference

लाभ यह है कि यह आईओएस 3.2 में उपलब्ध है और बाद में है, तो आप सिर्फ अपने UIPopOverController वस्तु दृष्टान्त साथ contentSizeForViewInPopover विधि की जगह, उपकरण संस्करण हर जांच करने की जरूरत नहीं है।

2

// self.contentSizeForViewInPopover = CGSizeMake (320.0, 600.0); // ios7

self.preferredContentSize = CGSizeMake (320.0, 600.0) में बहिष्कृत; // इसके बजाए

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