2012-05-01 12 views
25
का उपयोग करते समय

मैं एक ही मुद्दा इस सवाल में विस्तार से बताया है:UIWindow उपवर्गीकरण स्टोरीबोर्ड

Where can I change the window my app uses from UIWindow to my own subclass "MyWindow" with storyboard?

मेरे सवाल यह है कि मैं अपने एप्लिकेशन प्रतिनिधि है कि रिटर्न 'MyWindow' उपवर्ग में एक 'विंडो' गेटर विधि लागू करते है ? या शायद मेरे उप-वर्ग को मेरे ऐप की मुख्य विंडो में असाइन करने के अन्य तरीके हैं?

उत्तर

73

एक स्टोरीबोर्ड परियोजना में UIWindow subclassed जा सकता है:

खिड़की
जब एक स्टोरीबोर्ड किया जा रहा है, अनुप्रयोग विंडो में जोड़कर स्टोरीबोर्ड पेश करना होगा और उस खिड़की पर स्क्रीन डालने। एप्लिकेशन इस संपत्ति को विंडो के लिए पूछताछ करता है। इस संपत्ति द्वारा विंडो के संदर्भ में विंडो जारी होने से रोकने के लिए आवश्यक है। यदि संपत्ति का मूल्य nil ( डिफ़ॉल्ट) है, तो एप्लिकेशन UIWindow और का एक सामान्य उदाहरण बनाता है जो प्रतिनिधि को संदर्भ के लिए इस संपत्ति को असाइन करता है। एप्लिकेशन को एक अलग विंडो के साथ प्रदान करने के लिए इस प्रोटोकॉल की गेटर विधि को लागू कर सकता है।

अपने AppDelegate कार्यान्वयन में

दूसरे शब्दों में बस निम्नलिखित गेटर

ऑब्जेक्टिव-सी

- (MyCustomWindow *)window 
{  
    static MyCustomWindow *customWindow = nil; 
    if (!customWindow) customWindow = [[MyCustomWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    return customWindow; 
} 

स्विफ्ट

var customWindow: MyCustomWindow?  
var window: UIWindow? { 
    get { 
     customWindow = customWindow ?? MyCustomWindow(frame: UIScreen.mainScreen().bounds) 
     return customWindow 
    } 
    set { } 
} 
+0

दूंगा, क्या आप कृपया प्रदान कर सकते हैं कि मैं स्विफ्ट में गेटटर को कैसे ओवरराइड कर सकता हूं? –

+1

मैंने स्विफ्ट कोड –

+0

के साथ उत्तर अपडेट किया है बहुत बहुत धन्यवाद .. यह काम किया। मैं इसके लिए सेटर नहीं बना रहा था ताकि मुझे त्रुटि मिल रही हो। –

1

मेरे अपने ऐप्स में, मैंने "window" एपडिलेगेट में घोषित संपत्ति देखी है जब एक्सकोड टेम्पलेट्स से एक नया ऐप बनाते हैं।

आप उस बिंदु को "UIWindow" से "MyWindow" में बदलने के लिए उस बिंदु को संशोधित कर सकते हैं।

या, एक कम सुरुचिपूर्ण समाधान, आप इसे एक्सेस करते समय window की ऑब्जेक्ट प्रकार को "MyWindow" पर वापस कर सकते हैं। के रूप में एप्पल के UIApplicationDelegate संदर्भ में विस्तार से बताया

+1

उन में से न तो एक 'MyWindow' कारण होगा: पहले उपवर्ग UIWindow

class WinCustom : UIWindow{ .... } 
तो

AppDelegate में '। –

+0

@ नोहा विदरस्पून - vfxdomain शायद पहले से ही जानता है कि माईविंडो कैसे बनाया जाए (क्योंकि उसने [इस संबंधित प्रश्न] को संदर्भित किया है (http://stackoverflow.com/questions/7883886/where-can-i-change-the-window-my -एप-यूज-से-यूइविंडो-टू-माय-ऑल-सबक्लास-माईवी) वहां पोस्टिंग में)। मेरा सवाल यह था कि वह सोच रहा था कि माईविंडो को "विंडो" संपत्ति के गेटटर विधि द्वारा वापस कैसे किया जाए। –

+0

@ माइकल डॉउरमेन - हाँ, यही वह है जो मैं पूछ रहा हूं ...ऐप प्रतिनिधि में myWindow को UIWindow बदलना नोहा विदरस्पून की ओर इशारा नहीं करेगा। – izaslavs

0

इसकी नहीं इतनी मेहनत आप जोड़ना ' जा रहे हैं मिल बनाया-रूप में नज़र आते बस गलती से एक `MyWindow के लिए एक पहले से मौजूद` UIWindow` कास्टिंग के लिए

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    self.window = WinCustom(frame: UIScreen.main.bounds) 

    self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() 

    return true 
} 
संबंधित मुद्दे