7

मैं एक आईफोन व्यू और आईपैड पॉपओवर व्यू दोनों के लिए एक व्यू कंट्रोलर का उपयोग करना चाहता हूं। यदि दृश्य एक पॉपओवर में प्रदर्शित होता है, तो मैं यूआई के कुछ मामूली सुधार करना चाहता हूं।क्या यह मेरे UIViewController के लिए यह पता लगाने के लिए संभव है कि यह UIPopoverController में प्रदर्शित किया जा रहा है या नहीं?

क्या यह मेरे UIViewController के लिए यह पता लगाने के लिए संभव है कि यह UIPopoverController में प्रदर्शित किया जा रहा है या नहीं?

मुझे सामग्री SizeForViewInPopover प्रॉपर्टी मिली है, जो दृश्य का आकार बदलने के लिए बहुत बढ़िया है, लेकिन यदि पॉपअपव्यू व्यू में दृश्य लोड होता है तो मैं तत्व को हटाना/छिपाना चाहता हूं।

+1

मेरे पास एक ही प्रश्न है, लेकिन ऐसा लगता है कि आईओएस 5.0 के रूप में ऐसा करने का कोई विश्वसनीय तरीका नहीं है। तो मेरा कामकाज नियंत्रक के अंदर एक BOOL प्रॉपर्टी 'popoverMode' जोड़ना है और जब भी मैं उस नियंत्रक का उपयोग किसी पॉपओवर के अंदर करता हूं तो इसे सत्य पर सेट करना है। – adib

उत्तर

1

मुझे नहीं लगता कि यह संभव है। मैंने parentViewController की कक्षा को देखने की कोशिश की है, साथ ही प्रस्तुत करने वाले दृश्य नियंत्रक की कक्षा, और दोनों शून्य हैं। उनके बिना नेविगेशन नियंत्रक संपत्ति के समान UIViewController पर एक संपत्ति प्रदान करने के बिना, यह नहीं किया जा सकता है।

-1

आप इसे आजमा सकते हैं। मैंने इसका परीक्षण नहीं किया है।

if ([viewcontroller.parentViewController isKindOfClass:[UIPopoverController class]]) { 
     //do something... 
    } 

मुझे लगता है कि यह काम कर सकता है।

+0

यह काम नहीं करेगा क्योंकि UIPopoverController UIViewController का उप-वर्ग नहीं है; यह बेस क्लास NSObject है। –

0

मेरा दृष्टिकोण 2 प्रकार की प्रस्तुति में से प्रत्येक के लिए विभिन्न UIViewController उप-वर्गों का उपयोग/निर्माण करना होगा। अक्सर वे एक आम सुपरक्लास साझा कर सकते हैं। यहां एक उदाहरण दिया गया है:

@interface CMDetailsViewController : UIViewController 
@end 

@interface CMDetailsSinglePageViewController : CMDetailsViewController 
@end 

@interface CMDetailsPopoverViewController : CMDetailsViewController 
@end 

इनमें से प्रत्येक 2 कक्षाएं आपके बेस क्लास में परिभाषित कुछ व्यवहारों को अनुकूलित कर सकती हैं। आपके मामले में यह प्रस्तुति तर्क होगा, जो मुझे लगता है कि उपस्थिति विधियों में से एक में स्थित है (जैसे -(void)viewWillAppear:(BOOL)animated या वैकल्पिक) या -(void)viewDidLoad

आप निश्चित रूप से जिस तरह से आप दृश्य नियंत्रक प्रस्तुत कर रहे हैं जानते हैं: मान लें कि का उपयोग कर एक UINavigationController (iPhone पर) या UIPopoverController (iPad पर), तो आप तय कर सकते हैं जो इन 2 उपवर्गों में से एक बनाने के लिए।

सामान्य रूप से जब मैं एक सार्वभौमिक आईओएस एप्लिकेशन पर काम करता हूं तो मेरा डिफ़ॉल्ट दृष्टिकोण भी होगा। सिस्टम आपको प्रत्येक प्लेटफ़ॉर्म के लिए 2 अलग-अलग UIApplicationDelegates को परिभाषित करने देता है, जिसका अर्थ है कि आप उचित UIViewControllers का उपयोग कर सकते हैं, बिना किसी डिवाइस के ऐप लॉन्च किए गए डिवाइस की जांच के लिए।

-1

आप आसानी से जांच सकते हैं कि आपका डिवाइस आईपैड या आईफोन है या आपके समायोजन करें।

इस

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    // The device is an iPad 
} 
else 
{ 
    // The device is an iPhone or iPod touch. 
} 
1

की तरह कुछ का उपयोग आप अपनी कक्षा में विधि नीचे ओवरराइड और BOOL चर या कुछ कार्यों

- (CGSize)contentSizeForViewInPopover 
{ 
    popovermode = YES; 
    [self callhideMethod]; 
    return CGSizeMake(320, 200); 
} 

यह आपकी मदद कर सकते के साथ प्रबंधित कर सकें।

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