Comments (3)
But since we are lazy loading child nodes, the indexPath of a particular node changes depending on what is collapsed or expanded in the table.
If you've put the relevant data in the data model, then you'd get it like this:
id item = [self.indexPathController.dataModel itemAtIndexPath:indexPath];
where id
is replaced by whatever data type you've put in the data model. In your case, the data type is TLIndexPathTreeItem
, so you would get the data like:
TLIndexPathTreeItem *item = [self.indexPathController.dataModel itemAtIndexPath:indexPath];
id myDataObject = item.data;
If the relevant data does not live in the data model, then you can look it up elsewhere by identifier:
id identifier = [self.indexPathController.dataModel identifierAtIndexPath:indexPath];
id myDataObject = [self someMethodThatRetrievesDataById:identifier];
is called prior to cellForRowAtIndexPath:, so if we want to set the cell height dynamically we have to do it before the cell is created, and thus based on its contents.
You can write your own implementation of heightForRowAtIndexPath
, but TLTableViewController
provides a default implementation that uses the prototype method discussed here. Basically, the controller dequeues instances of your cells internally and uses them for height calculations. If your cell implements the TLDynamicSizeViewProtocol
, it calculates the height by calling the cell's sizeWithData:
protocol method. See the DynamicHeightCell
class in the "Dynamic Height" sample project for an example of a sizeWithData
implementation. If your cell does not implement TLDynamicSizeViewProtocol
, then size of the prototype cell is returned.
So if you're using storyboard, the default implementation of heightForRowAtIndexPath
automatically returns any custom cell heights you've made in the storyboard. And if the heights need to vary based on the data that goes in the cell, then implement TLDynamicSizeViewProtocol
.
Is that what you were looking for?
from tlindexpathtools.
Thanks, TLIndexPathTreeItem *item = [self.indexPathController.dataModel itemAtIndexPath:indexPath]
was the trick. I didn't realize that children were getting added to dataModel as I didn't see it in willChangeNode
. I spent some time a while ago struggling to get Dynamic Height to work (and actually in the example if you decrease the label font size in storyboard it breaks), so I ended up estimating height based on font size in heighForRowAtIndexPath
.
from tlindexpathtools.
I spent some time a while ago struggling to get Dynamic Height to work (and actually in the example if you decrease the label font size in storyboard it breaks), so I ended up estimating height based on font size in heighForRowAtIndexPath.
The example project is using Auto Layout so you may get unexpected results if the constraints are in a weird state. If you just change the label font size, the Auto Layout system inserts some constraints to maintain the original frame and these constraints are overriding the result of [label sizeToFit]
. The way to fix it (besides turning off Auto Layout) is:
- Note the width of the label
- Change the font size
- Se the label to it's intrinsic size by selecting it and typing "command" + "=".
- Drag the label's width back the value noted in (1).
I didn't realize that children were getting added to dataModel as I didn't see it in willChangeNode.
Right. The data model items always reflect the current set of rows (in fact the primary purpose of the data model is to fulfill the table view's dataSource
delegate methods, numberOfRowsInSection
, ect.).
The willChangeNode
delegate method only gets called when nodes are expanded and collapsed. It doesn't get called on hiding or showing. I could add delegate methods for hide and show if you think it's useful.
from tlindexpathtools.
Related Issues (20)
- TLCollectionViewController with fetchRequest delete NSManagedObject fault crash HOT 2
- Changing the TLIndexPathDataModel while animations under way causes crash HOT 1
- DataModel+IndexPathUpdates do not detect modified Core Data model objects HOT 2
- Realm HOT 3
- Same item in multiple sections: Possible? HOT 2
- Swift support HOT 4
- Warning : Duplicate Item Ignored (Noob Question) HOT 2
- Wrong optionality on controller: willUpdateDataModel: HOT 2
- Swift support HOT 1
- Swift Implementation Question HOT 2
- TLCollapsibleTableViewController
- Crash when reordering items HOT 2
- Unable to get dynamic height working HOT 4
- Cocoa Pod HOT 2
- TLTreeTableViewController: Keep only one expanded parent (close others) HOT 2
- NSManagedObject changes not detected by TLIndexPathController HOT 19
- Analysis Warning -- FYI HOT 1
- Another Suggestion Needed : Boxing Swift Structs HOT 4
- Non-ideal hash calculation HOT 3
- Drawback in case of adding dynamic data from API in multilevel expandable tableview/accordion HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tlindexpathtools.