2014-11-12 5 views
6

मेरे ऐप में एक विकल्प है जो उपयोगकर्ता को मानक "पूर्ण-आकार" विंडो टाइटलबार/टूलबार और NSWindow 10.10 एपीआई में उपलब्ध "कॉम्पैक्ट" टाइटलबार/टूलबार के बीच चयन करने की अनुमति देता है। विशेष रूप से, मैं उपयोगकर्ता की वरीयता के आधार पर NSWindowTitleVisible या NSWindowTitleHidden सेट करने के लिए -titleVisibility विधि का उपयोग कर रहा हूं। यदि उपयोगकर्ता "कॉम्पैक्ट टाइटलबार" चेकबॉक्स की जांच करता है, तो NSWindowTitleHidden विंडो पर लागू होता है, अन्यथा, विंडो डिफ़ॉल्ट शैली का उपयोग करती है। जब चेकबॉक्स मान बदलता है, तो मान ऐप के उपयोगकर्ता डिफ़ॉल्ट में संग्रहीत होता है, और विंडो को अद्यतन/पुन: खींचा जाता है।NSWindow के साथ NSWindowVitleVisibility उपयोगकर्ता डिफ़ॉल्ट पर गलत फ्रेम सहेजने वाला नहीं है?

एप्लिकेशन को फिर से लॉन्च होने तक सबकुछ बढ़िया काम करता है। प्रत्येक बार जब ऐप शुरू होता है, तो खिड़की डिफ़ॉल्ट शैली शैली (NSWindowTitleVisible) से नई शैली (NSWindowTitleHidden) पर स्विच करके कितनी जगह बचाई जाती है। इसलिए ऐप को पुनरारंभ करना 5-6 बार मेन्यूबार और डॉक के साथ विंडो फ्लश करेगा, इस पर निर्भर करता है कि जब चेकबॉक्स प्रारंभ में चेक किया गया था तब खिड़की कितनी बड़ी थी।

दूसरे शब्दों में, ऐसा लगता है कि संपत्ति सेट होने पर विंडो के फ्रेम को NSUserDefaults में अपडेट किया जा रहा है। क्या इसके लिए कोई कामकाज है, या क्या मैं बस कुछ दिख रहा हूं? कोई सलाह muy सहायक होगा।

धन्यवाद!

+0

यह पागल है कि वे तय नहीं किया है कि अभी तक, मैं एक ही मुद्दा है, की स्थापना हो रही है '[self.window setTitleVisibility: NSWindowTitleHidden];' मेरी खिड़की नियंत्रक के 'awakeFromNib' विधि में। शायद हम कुछ गलत कर रहे हैं ... – Nightbirdsevolve

+0

ओएसएक्स 10.10 के कैलेंडर ऐप में यह विशेष रूप है और इसमें कोई समस्या नहीं है। – Nightbirdsevolve

उत्तर

0

अब के लिए सरल ठीक बचाने के लिए और खिड़की के फ्रेम मैन्युअल बहाल करने के लिए है, यहाँ है कैसे मैं यह कर:

अपने अनुप्रयोग प्रतिनिधि में, जब आवेदन समाप्त हो जाता है, को बचाने के खिड़की के फ्रेम

- (void)applicationWillTerminate:(NSNotification *)notification 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:NSStringFromRect(self.windowController.window.frame) forKey:@"WindowFrameKey"]; 
} 

अपने विंडो नियंत्रक के -awakeFromNib विधि में, फ्रेम

- (void)awakeFromNib 
{ 
    if([NSWindow instancesRespondToSelector:@selector(setTitleVisibility:)]) 
    { 
     // Hide Titlebar 
     [self.window setTitleVisibility:NSWindowTitleHidden]; 

     NSString *winFrameString = [[NSUserDefaults standardUserDefaults] stringForKey:@"WindowFrameKey"]; 

     if(winFrameString != nil) 
     { 
      NSRect savedRect = NSRectFromString(winFrameString); 

      if(!NSEqualRects(self.window.frame, savedRect)) 
      { 
       [self.window setFrame:savedRect display:YES animate:NO]; 
      } 
     } 
    } 
2

titleVisibility प्रोप सेट करने का प्रयास बहाल उपयोगकर्ता निर्धारित क्रम में नंबर 1 के लिए erty गुण

enter image description here

1 के लिए NSWindowTitleHidden

typedef NS_ENUM(NSInteger, NSWindowTitleVisibility) { 
    /* The default mode has a normal window title and titlebar buttons. */ 
    NSWindowTitleVisible = 0, 
    /* The always hidden mode hides the title and moves the toolbar up into the area previously occupied by the title. */ 
    NSWindowTitleHidden = 1, 
} NS_ENUM_AVAILABLE_MAC(10_10); 

संबंधित मान है हालांकि इस शिकायत की कि NSWindow है सांत्वना के लिए एक संदेश मुद्रित होगा कुंजी शीर्षक के लिए महत्वपूर्ण मूल्य कोडिंग-अनुरूप नहीं है दृश्यता ओएस एक्स संस्करणों पर 10.10

1

समस्या यह है कि विंडो आकार का उपयोग करते हुए -[NSWindow setFrameUsingName:] से पहले titleVisibility सेट किया गया है प्रणाली की बहाली है:एक बेहतर (और काम करने की पुष्टि की) समाधान pointum द्वारा https://openradar.appspot.com/18510665 पर तैनात थे। समाधान:

  1. इंटरफ़ेस बिल्डर में "ऑटोओव नाम" मान निकालें।
  2. -[NSWindow setFrameAutosaveName:] का उपयोग कर titleVisibility सेटिंग के बाद इसे सही कोड में सेट करें।
संबंधित मुद्दे