2009-05-01 11 views
7

के बिना प्रोग्रामिक रूप से पदानुक्रम देखें, ऐसा लगता है जैसे कोको टच टेम्पलेट्स को निब लोड करने के लिए सेट किया गया है।एक दृश्य नियंत्रक लोड करना और कोको टच में xib

यदि मैं एक नई प्रोजेक्ट शुरू करना चाहता हूं जो व्यू कंट्रोलर का उपयोग करने जा रहा है, और अपने दृश्य (पदानुक्रम) को प्रोग्रामेटिक रूप से लोड करता है, तो nib/xib से नहीं, टेम्पलेट को सेट अप या समायोजित करने के चरण क्या हैं।

हालांकि मुझे बस इतना करना था -loadView लागू करना था, लेकिन हर बार जब मैं ऐसा करने की कोशिश करता हूं तो मुझे परेशानी होती है।

+0

हाँ, आप लोड व्यू के भीतर अपना दृश्य और सबव्यूज़ प्रारंभ करके और जोड़कर जो करने की कोशिश कर रहे हैं, वह करने में सक्षम होना चाहिए। अपने गुप्त भाषा को भेजने से पहले सावधानी बरतें? –

+0

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

उत्तर

16

पूरी तरह से प्रोग्रामेटिक यूजर इंटरफेस पीढ़ी करना उचित है। सबसे पहले, आप main.m संपादित करने के लिए निम्नलिखित की तरह कुछ देखने की जरूरत है:

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [NSAutoreleasePool new]; 
    UIApplicationMain(argc, argv, nil, @"MyAppDelegate"); 
    [pool release]; 
    return 0; 
} 

जहां MyAppDelegate आपके आवेदन प्रतिनिधि क्लास का नाम है। इसका मतलब है कि MyAppDelegate का एक उदाहरण लॉन्च पर बनाया जाएगा, जो सामान्य रूप से एप्लिकेशन के लिए मुख्य निब फ़ाइल द्वारा संभाला जाता है।

MyAppDelegate के भीतर, अपने applicationDidFinishLaunching लागू: निम्न के समान विधि:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{  
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    if (!window) 
    { 
     [self release]; 
     return; 
    } 
    window.backgroundColor = [UIColor whiteColor]; 

    rootController = [[MyRootViewController alloc] init]; 

    [window addSubview:rootController.view]; 
    [window makeKeyAndVisible]; 
    [window layoutSubviews];  
} 

जहां MyRootViewController अपने विंडो में प्राथमिक दृश्य के लिए दृश्य नियंत्रक है। इसे मुख्य विंडो को प्रारंभ करना चाहिए, और इसमें MyRootViewController द्वारा प्रबंधित दृश्य जोड़ें। बाद में संदर्भ के लिए रूट नियंत्रक को प्रतिनिधि के भीतर एक आवृत्ति चर के रूप में रखा जाता है।

इससे आपको MyRootViewController के माध्यम से प्रोग्रामेटिक रूप से अपना यूजर इंटरफेस जेनरेट करने देना चाहिए।

+0

@ ब्रैड लार्सन, हे धन्यवाद आदमी, यह बहुत उपयोगी है! –

3

UIViews के पास पदानुक्रम नहीं है, UINavigationControllers करते हैं। तो उनमें से एक को init, और एक UIViewController अपने ढेर पर पॉप। इसे संभवतः सबसे बुनियादी तरीके से करना चाहिए, बिना किसी एक्सआईबी फाइलों के। आपको इस पर निर्माण करने में सक्षम होना चाहिए।

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    UINavigationController *navController = [[UINavigationController alloc] init]; 

    UIViewController *viewController = [[UIViewController alloc] init]; 

    // set the properties of viewController here, to make it look like you want 

    [navController pushViewController:viewController animated:NO]; 

    [window addSubview:navController.view]; 

    // Don't forget memory management 
    [navController release]; 
    [viewController release]; 

    [window makeKeyAndVisible]; 
} 
+4

असल में, UIViews स्क्रीन पर लेआउट के लिए पदानुक्रम बनाए रखता है, न केवल उस प्रकार के पदानुक्रम के बारे में जिसे आप नेविगेशन के संबंध में सोच रहे हैं। –

+0

पर्याप्त सच है। मैंने नहीं सोचा था कि वह यही पूछ रहा था, लेकिन आप बिल्कुल सही हैं। – mmc

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