سؤال

في IB فمن السهل أن ربط تسمية أو حقل النص لkeyPath بعض حدة التحكم.

ووNSDockTile (متوفر عبر [[NSApp dockTile] setBadgeLabel: @ "123"]) لا يظهر في IB، وأنا لا يمكن معرفة كيفية ربط ممتلكاتها "badgeLabel" برمجيا مثلك قد ربط التسمية / حيز النص / عمود الجدول.

وأي أفكار؟

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

المحلول

وNSDockTile ليس لديه أي ارتباطات، بحيث تحكم الخاص بك وسوف يكون لتحديث بلاط الرصيف يدويا. هل يمكن القيام بذلك باستخدام المنظمة من شأنه أن يكون له نفس التأثير على أنها ملزمة له.

وإنشاء السياق كما عالمي:


static void* MyContext=(void*)@"MyContext";

وبعد ذلك، في أسلوب الحرف الأول الخاص بك:


[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];

وثم لديك لتنفيذ هذه الطريقة أن يتم إعلامك من تغييرات على مسار مفتاح:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == MyContext) {
        [[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

تأكد من إزالة المراقب عند الكائن تحكم يذهب بعيدا.

نصائح أخرى

إذا لا NSDockTile الارتباطات الدعم، يمكنك استخدام bind:toObject:withKeyPath:options: طريقة لإنشاء الارتباطات على الممتلكات badgeLabel. راجع وثائق للحصول على التفاصيل التي الحجج للاستخدام. إذا كان لا يعمل، هل يمكن إما تنفيذ قيمة المفتاح الرصد في الدرجة حدة التحكم الخاصة بك وتحديث تسمية كل مرة تتغير قيمة، أو حتى تجاوز NSDockTile لخلق روابط فرعية متوافقة.

ولقد حاول الكثير من الاختلافات من bind:toObject:withKeyPath:options: على NSDockTile، على وحدة تحكم، على مصدر البيانات. أنا لا يمكن معرفة مزيج يعمل. بدلا من ذلك، هناك طريقة وجود كائن BatchController التي يمكن أن تكون ملزمة لمصدر البيانات، ومن ثم يقوم بتحديث شارة؟ كيف يمكنني اتخاذ NSObject وجعلها التي يمكن ربطها؟

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