That was it. Thanks Luke! Really digging this control ...
On Wed, Mar 9, 2016 at 10:36 AM, Luke Hiesterman <luket...@apple.com> wrote: > UICollectionView doesn’t know that your layout is conceptually columns, so > when a section is empty, it has no concept of what space is appropriate to > drop items into an empty section. You need to help it out by overriding the > following method on your layout: > > - (NSIndexPath *)targetIndexPathForInteractivelyMovingItem:(NSIndexPath > *)previousIndexPath withPosition:(CGPoint)position NS_AVAILABLE_IOS(9_0); > > Luke > > On Mar 9, 2016, at 5:58 AM, Luther Baker <lutherba...@gmail.com> wrote: > > Ok - I think this is the final question. > > I've created a layout that is essentially a bunch of ragged bottom columns > - like a Trello or Kanban board. The items in the collection view are > "stories" with size around 100x100. To begin with, I prepopulate the > underlying datastore and things are great, I've got 2, 3 or 4 stories in > each column. Dragging around works just as expected. > > In my case, a column is a SECTION. A 4 column board then has 4 sections. > > Problem: if I move ALL the items out of a column (a column is a SECTION) > ... I can't move anything back INTO the column (section). I don't think the > SECTION has any HEIGHT if it has no items ... and consequently, dragging a > "story" item over the area that represents a column does nothing because > the CollectionView doesn't actually create anything there if I have at 0 > item layoutAttributes for that section. > > Is there a specific way to do this? I still have a supplementary view as > the column header and it always appears ... and in a UITableView, I think, > if I have a empty section but have a section header, the built in move > functionality will allow me to drag an item over the section header and > allow me to drop into the section (but I can't remember if this is true) > --- but dragging an "story" item over the supplementary view does nothing. > > In the worst case, do I need to keep some sort of hidden item as the first > element? I take all "stories" out of a column (section), should I put at > least one, invisible item in the column (section) to keep it available as a > drag target? > > Hope that makes sense - I tend to be wordy. > > Thanks, > -Luther > > > > On Tue, Mar 8, 2016 at 12:05 AM, Luther Baker <lutherba...@gmail.com> > wrote: > >> Now we're cooking with GAS!!!!!!! >> >> override func applyLayoutAttributes(layoutAttributes: >> UICollectionViewLayoutAttributes) { >> print("apply layout attributes!: \(titleLabel.text)") >> } >> >> Thanks Man! >> -Luther >> >> >> >> On Mon, Mar 7, 2016 at 11:54 PM, Luke Hiesterman <luket...@apple.com> >> wrote: >> >>> By teaching a cell to respond to an attribute I merely meant that it >>> should override setLayoutAttributes: and do something in there with the >>> relevant property. Hope that helps. >>> >>> Luke >>> >>> On Mar 7, 2016, at 9:39 PM, Luther Baker <lutherba...@gmail.com> wrote: >>> >>> > teach your cell classes to respond to that property >>> >>> Want to think about this out loud. Wondering what would 'trigger' a >>> lookup on the layout's layoutAttributesForItemAtIndexPath ... and where >>> would I store the indexPath I am dragging around. >>> >>> If I were to be more literal - in my view controller, I handle the >>> UIGestureRecognizerState.Began event. At this point, I can get the >>> indexPath of the element I am about to move and if I change something on >>> that cell at that time, it sticks for the life of the drag without >>> reference to layoutAttributes. I also handle the >>> UIGestureRecognizerState.Changed event and again, if I retrieve the cell at >>> the gesture's locationInView and change things in it ... those changes >>> stick until I let go of the drag. >>> >>> Stepping into the custom layout for a minute ... as you suggested, I am >>> now implementing layoutAttributesForInteractivelyMovingItemAtIndexPath ... >>> and that is getting invoked in response to the >>> updateInteractiveMovementTargetPosition call I am making as the gesture >>> location changes. Now, I know the collection view's methods are triggering >>> the layout's callbacks - but I'm not sure what would trigger me to fetch >>> the custom attributes you are suggesting. At a minimum, to ask the layout >>> for the attributes at that indexPath, I'd have to actually be tracking the >>> 'selectedIndexPath' in which case, I could just get the cell and modify it >>> directly. >>> >>> I guess I'm wondering how to "teach my cells classes to respond to that >>> property" ... Cells are reused so I'm not even sure how I'd go about >>> setting up and tearing down a KVO type relationship for the specific cell I >>> am dragging around. Maybe there is a WWDC video that digs into this? or >>> it's an easy explain? >>> >>> Sorry for being so long-winded. I'm not sure I'm communicating my >>> question well. Hope you can understand my underlying question and nudge me >>> the right way but at any rate, thanks for your help so far. I'd love to use >>> an elegant, "made for CollectionView" solution ... but I don't think I'm >>> looking at it correctly yet. Just in general I guess, how can a change to >>> the layoutAttributes cause my CollectionViewDelegate and DataSources to >>> fetch the cell I'm dragging around and change it (or does it not require >>> the delegates or datasources ... ?) >>> >>> Thanks, >>> -Luther >>> >>> >>> >>> On Mon, Mar 7, 2016 at 2:45 PM, Luke Hiesterman <luket...@apple.com> >>> wrote: >>> >>>> You can create your own subclass of UICollectionViewLayoutAttributes >>>> and add something like an “isMoving” property to that. Then teach your cell >>>> classes to respond to that property by changing the background color. >>>> >>>> Luke >>>> >>>> On Mar 7, 2016, at 11:44 AM, Luther Baker <lutherba...@gmail.com> >>>> wrote: >>>> >>>> Thanks Luke! That was it - I can drag and drop successfully now. >>>> >>>> One more question, how do I modify a property of the item I'm dragging >>>> around if the property is NOT currently in UICollectionViewLayoutAttributes >>>> ... I don't see a call to the datasource or delegate when I select the cell >>>> for moving ... so I'm not sure how to change the background color to "red" >>>> for instance. >>>> >>>> Would I have to add my own view to the superview and manually move it >>>> around in the dragging callbacks? >>>> >>>> Thanks! >>>> -Luther >>>> >>>> >>>> On Mon, Mar 7, 2016 at 11:59 AM, Luke Hiesterman <luket...@apple.com> >>>> wrote: >>>> >>>>> I’d check your return value for this method in your layout: >>>>> >>>>> - (UICollectionViewLayoutAttributes >>>>> *)layoutAttributesForInteractivelyMovingItemAtIndexPath:(NSIndexPath >>>>> *)indexPath withTargetPosition:(CGPoint)position NS_AVAILABLE_IOS(9 >>>>> _0); >>>>> >>>>> Luke >>>>> >>>>> On Mar 7, 2016, at 9:55 AM, Luther Baker <lutherba...@gmail.com> >>>>> wrote: >>>>> >>>>> I followed the directions here, >>>>> >>>>> http://nshint.io/blog/2015/07/16/uicollectionviews-now-have-easy-reordering/ >>>>> - to add iOS9 style dragging to my UICollectionView - and it sort of >>>>> works. >>>>> >>>>> As described in the article, I added a long press gesture recognizer >>>>> and >>>>> wired it in to make calls on the collection view -- but now, if I long >>>>> press, the element under my finger disappears. As I drag the >>>>> transparent >>>>> image around, the other elements shift - but I can never see the >>>>> element I >>>>> am dragging around. When I let go, there is simply a hole left where I >>>>> "dropped" the element. >>>>> >>>>> I do, very much, have a custom layout and I'm not sure that if, for >>>>> drag, I >>>>> need to do anything special. Do I need to calculate the frame of the >>>>> item I >>>>> am dragging around? I'm not sure what to try next except to roll my own >>>>> dragging. Any thoughts or things to try? >>>>> >>>>> Thanks in advance. >>>>> _______________________________________________ >>>>> >>>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) >>>>> >>>>> Please do not post admin requests or moderator comments to the list. >>>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com >>>>> >>>>> Help/Unsubscribe/Update your Subscription: >>>>> https://lists.apple.com/mailman/options/cocoa-dev/luketheh%40apple.com >>>>> >>>>> This email sent to luket...@apple.com >>>>> >>>>> >>>>> >>>> >>>> >>> >> > > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com