2015-05-14 2 views
1

TL; WR

Каков наилучший способ поповера-переход от клонированного зрения (NSCollectionViewItem)?поповера переход от NSCollectionViewItem


Добрый день,

Я пытаюсь выяснить, как непосредственно перейти от itemPrototype, но это не так прямолинейно, как я надеялся, и отключился мою вверх, несколько.

У меня есть NSCollectionView с переменным числом NSCollectionViewItems, каждый с кнопкой. Я надеялся, что все, что мне нужно сделать, чтобы перейти от кнопки к маленькому информационному окну, будет подключать это окно к кнопке с помощью popover segue, но, как мне повезло, это не так, как это делается ,

Я предполагаю, что, поскольку кнопка на прототипе NSCollectionViewItem клонирована для заполнения NSCollectionView, она передает смешанные сообщения в segue, когда она вызывается. В частности, я получаю следующую ошибку, когда я нажимаю одну из кнопок.

*** Assertion failure in -[ProductTile presentViewController:animator:], /SourceCache/AppKit/AppKit-1348.11/Controllers/NSViewController.m:815 
presentViewController:animator:: View '<ProductTile: 0x610000100ea0>{represented object: (null), view: <NSView: 0x6100001208c0> (frame {{0, 0}, {346, 216}}), selected: NO}''s view is not in a window/view hierarchy. 
(
    0 CoreFoundation      0x00007fff9688c03c __exceptionPreprocess + 172 
    1 libobjc.A.dylib      0x00007fff8dea576e objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff9688be1a +[NSException raise:format:arguments:] + 106 
    3 Foundation       0x00007fff880408cb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195 
    4 AppKit        0x00007fff8c10413c -[NSViewController presentViewController:animator:] + 535 
    5 AppKit        0x00007fff8c10447f -[NSViewController presentViewController:asPopoverRelativeToRect:ofView:preferredEdge:behavior:] + 169 
    6 AppKit        0x00007fff8c3bf75a -[NSStoryboardPopoverSegue perform] + 402 
    7 libsystem_trace.dylib    0x00007fff9451acd7 _os_activity_initiate + 75 
    8 AppKit        0x00007fff8be33fc1 -[NSApplication sendAction:to:from:] + 452 
    9 AppKit        0x00007fff8be49a56 -[NSControl sendAction:to:] + 86 
    10 AppKit        0x00007fff8be49972 __26-[NSCell _sendActionFrom:]_block_invoke + 131 
    11 libsystem_trace.dylib    0x00007fff9451acd7 _os_activity_initiate + 75 
    12 AppKit        0x00007fff8be498cf -[NSCell _sendActionFrom:] + 144 
    13 libsystem_trace.dylib    0x00007fff9451acd7 _os_activity_initiate + 75 
    14 AppKit        0x00007fff8be47dc3 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2821 
    15 AppKit        0x00007fff8bea045f -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 770 
    16 AppKit        0x00007fff8be46476 -[NSControl mouseDown:] + 714 
    17 AppKit        0x00007fff8c3b030c -[NSWindow _reallySendEvent:isDelayedEvent:] + 14125 
    18 AppKit        0x00007fff8bd3fd96 -[NSWindow sendEvent:] + 470 
    19 AppKit        0x00007fff8bd3c322 -[NSApplication sendEvent:] + 2504 
    20 AppKit        0x00007fff8bc65c78 -[NSApplication run] + 711 
    21 AppKit        0x00007fff8bbe2354 NSApplicationMain + 1832 
    22 Kimochi Client      0x0000000100006b62 main + 34 
    23 libdyld.dylib      0x00007fff939715c9 start + 1 
    24 ???         0x0000000000000003 0x0 + 3 
) 

В первую очередь, то, что я получаю от этого, - это чувство страха. Кроме того, я действительно не думаю, что он любит клоны (должен быть на темной стороне).

Я искал альтернативы созданию этого popover segue с помощью раскадровки, но похоже, что это не может быть общей проблемой (либо это, либо я до сих пор не используется для относительно небольшого количества разработчиков для ОС ИКС).

В частности, мой вопрос: Как я могу «сделать» походный сегмент из itemPrototype? Я определенно готов сделать это программно, но раньше я не писал GUI-код в Objective C, поэтому я хотел бы знать, что такой segue, безусловно, возможен, прежде чем я попытаюсь понять это. Я не хочу в конечном итоге вытаскивать волосы из-за технической невозможности.

Спасибо, что нашли время, чтобы прочитать это! Я ценю любую информацию, которую вы можете мне дать, и, пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию, чтобы сделать мой вопрос более ясным.

Майкл

Edit [2015-05-15 18:59]

Чтобы помочь проиллюстрировать то, что я спрашиваю, ниже два изображения; пример моего представления коллекции и пример popper segue, который я хотел бы применить к элементам в представлении коллекции. Надеюсь, это полезно, хотя я могу видеть, как это может быть несколько запутанным, поэтому, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

CollectionView View I'd like to "popover" to any of the CollectionViewItems

Edit [2015-05-15 19:08]

Вышеприведенные две картины, вероятно, не сделать достаточно, чтобы объяснить, что я надеюсь достичь, так это следующее представление моей конечной цели. Надеюсь, это прояснит все.

End goal

Майкл

+0

Я не уверен, что понимаю, чего вы пытаетесь достичь здесь. Вы пытаетесь открыть NSPopover в коллекцииViewItem? – harryhorn

+0

@harryhorn Да, это точно. У меня есть NSCollectionViewItem с кнопкой на нем, и я хотел бы открыть popup segue на этой кнопке/представлении. –

+0

@harryhorn Я добавил свой вопрос с некоторыми фотографиями, которые, надеюсь, сделают мой вопрос немного более ясным. См. Последние изменения. –

ответ

1

раскадровки являются относительно новыми для OS X.NSCollectionView, похоже, не очень любит Apple. Было много сообщений о том, что комбинация NSCollectionView и раскадровки является ошибкой. Таким образом, вам может быть лучше сделать это без раскадровки.

Возможно, проще всего подключить кнопку к методу действий на вашем контроллере. В этом методе действий вы можете использовать параметр sender, чтобы идентифицировать кнопку и, оттуда, элемент просмотра коллекции.

Затем вы можете открыть всплывающее окно. Вы должны создать экземпляр диспетчера представлений для загрузки представления поп-контента из NIB (т. Е. [[MyViewController alloc] initWithNibName:@"MyPopOverContentView" bundle:nil]). Вы должны установить контроллер вида representedObject. Вы должны создать NSPopover и установить его contentViewController на контроллер вида и настроить его другие свойства. Затем вы представите его, используя -showRelativeToRect:ofView:preferredEdge:. Вы бы указали его относительно либо sender, либо одного из его представлений предков в представлении вида коллекции.

+0

Спасибо за помощь, я наконец смог понять это, используя ваш ответ. Извините, сколько времени мне понадобилось, но я ценю ваше терпение. –

Смежные вопросы