MacRuby + واجهة البناء:كيفية عرض ، ثم أغلق ثم عرض النافذة مرة أخرى

StackOverflow https://stackoverflow.com/questions/4843216

سؤال

أنا n00b مع MacRuby والكاكاو ، حتى أن تبقي في الاعتبار عند الإجابة على أحتاج الكثير من التفاصيل و الشرح.:)

لقد قمت بإعداد مشروع بسيط 2 ويندوز في ذلك ، سواء التي يتم بناؤها مع واجهة البناء.الإطار الأول هو بسيط قائمة الحسابات باستخدام طريقة عرض جدول.أنه يحتوي على "+" زر في أسفل الجدول.عندما كنت اضغط على زر + أريد أن تظهر "إضافة حساب جديد" نافذة.

أنا أيضا AccountsController < NSWindowController و AddNewAccountController < NSWindowController الدرجة تعيين المندوبين على هذه النوافذ مع الزر المناسب انقر فوق أساليب السلكية و منافذ المرجعية اللازمة ويندوز.

عندما كنت اضغط على زر "+" في إطار حسابات لدي هذا الكود النار:

    @add_account.center
    @add_account.display
    @add_account.makeKeyAndOrderFront(nil)
    @add_account.orderFrontRegardless

هذا يعمل كبيرة أول مرة كنت اضغط على زر+.كل شيء يظهر أنا قادرة على إدخال البيانات و قد ربط النموذج.ومع ذلك ، عندما أغلق إضافة حساب جديد شكل تبدأ الأمور تسير سيئة.

إذا كنت تريد إضافة حساب جديد نافذة للافراج عن قريب ، ثم في المرة الثانية كنت انقر على زر + النافذة لا يزال يطفو على السطح لكنه المجمدة.لا أستطيع الضغط على أي أزرار ، إدخال أي بيانات ، أو حتى إغلاق النموذج.أفترض أن هذا هو لأن شكل هذا الرمز قد أفرج عنه ، حتى لا يكون هناك أي رسالة حلقة تجهيز شكل...ولكن أنا لست متأكدا تماما عن هذا.

إذا كنت تريد إضافة حساب جديد نافذة لم تفرج عن قريب ، ثم في المرة الثانية كنت انقر على زر + النافذة يظهر بخير و هي قابلة للاستخدام - لكنه لا يزال لديه كل البيانات التي كنت قد دخلت سابقا...انها لا تزال لا بد أن حسابي السابقة الدرجة سبيل المثال.

ما الخطأ الذي فعلته ؟ ما هو الطريق الصحيح إنشاء مثيل جديد من إضافة حساب جديد نموذج إنشاء حساب جديد نموذج ربط هذا النموذج إلى النموذج ثم تظهر على شكل, عندما اضغط على زر + على حسابات النموذج ؟

...هذا هو كل ما يجري على OSX 10.6.6, 64bit, مع كسكودي 3.2.4

هل كانت مفيدة؟

المحلول

المسألة هي أنه لا إنشاء النافذة في كل مرة.الإفراج عن قرب قليلا مزعج الخيار وعموما يستخدم فقط إذا كنت تعرف نافذة تحكم أيضا أن يطلق سراحه عند إغلاق الإطار.(ملاحظة انا لم استخدم MacRuby لذلك سوف يكون إعطاء التعليمات البرمجية في Obj-C كما أعلم أن هذا هو الصحيح ، نأمل يمكنك تحويله.سأكون على افتراض GC هو كما ينبغي أن يكون مع MacRuby).

الآن هناك طريقتان للقيام بذلك.أنا لست متأكدا تماما كيف بنك الاستثمار القومي/دروس يتم إعداد كما أنها يمكن أن تكون واحدة من طريقتين.

--

أول الطريق إلى حلها هو استخدام منافذ كنت تستخدم للإشارة إلى شكل عناصر فارغة بها عند عرض النافذة مرة أخرى على سبيل المثال [myTextField setStringValue:@""].إذا كنت تستخدم الكاكاو الارتباطات ثم انها اصعب قليلا, ولكن أساسا لديك للتأكد من الالتزام كائن مموها.أنصح ضد الارتباطات على الرغم من إذا كنت جديدا على الكاكاو.

--

الطريقة الثانية هي جعل AddNewAccountController فئة فرعية من NSWindowController.عند الضغط على زر + كنت ثم إنشاء مثيل جديد من وعرضه (تذكر لتخزينه في ايفار).أفضل طريقة للقيام بذلك سيكون هكذا:

if (!addAccountController) {
    addAccountController = [[AddNewAccountController alloc] initWithWindowNibName:@"AddNewAccountController"];
    [[addAccountController window] setDelegate:self];
}
[addAccountController showWindow:self];

هذا يمنع مثيل جديد تبذل إذا كانت نافذة مرئية بالفعل.ثم تحتاج إلى تنفيذ مندوب:

- (void)windowWillClose:(NSNotification *)notification {
    //If you don't create the account in the AddNewAccountController then do it here
    addAccountController = nil;
}

ومن الواضح أن كنت بحاجة إلى تحريك نافذة منفصلة بنك الاستثمار القومي يسمى "AddNewAccountController".في هذا الاستثمار القومي تأكد من تعيين فئة من مالك الملف إلى AddNewAccountController ثم ربط الملف المالك نافذة منفذ إلى النافذة.

عندما يتم تعيين كل هذا ستجد جديدة تحكم/نافذة في كل مرة.كما له فائدة من تقسيم المناقير و تحكم في أكثر تركيزا وحدة.

--

شيء واحد آخر.في حين أنه لا بأس أن تفعل شيئا مثل هذا في نافذة ، قد ترغب في نهاية المطاف تبدو في القيام بذلك عن طريق ورقة ، ثم منع إمكانية إضافة حساب نافذة الحصول على خفية وراء النوافذ الأخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top