iOS custom UITableView and UITableViewCell with columns (Twitter app) - objective-c

I'm developing an iPhone/iPod application, and the designer used a lot of these "Twitter App Concepts" (screenshot). As you can see, the TableView has a shadow and the cells can be split in columns (those columns are clickable).
I just need to create those columns, any idea how I can accomplish that?

The prettykit library is probably a good place to start, as the library is a subclass of UITableViewCell and UINavigationController.
http://cocoacontrols.com/platforms/ios/controls/prettykit

Well a UITableViewCell is a UIView so in your tableView:cellForRowAtIndexPath: when you hit that row simply add 3 subviews to the UITableViewCell.
There is one downside to this approach though and that is if there are a lot of these "Column Cells" then it will hinder performance. You also tend to want to avoid more then 5 subviews in a UITableViewCell
In case you are wondering "Why can't i just add multiple cells to a Single Row?"
Good question and the reason is UITableView's dequeueReusableCellWithIdentifier: (Reference) this takes an Index Path which is a combination of the Section Number and Row Number the Cell is in.
As it only returns a single cel, it's impossible to return multiple cells (unless you write a custom implementation), but you can return a cell with multiple subviews that has a unique identifier ;)
UITableViewCell Class Reference
UIView Class Reference
Edit: The library that danielbeard linked looks to be a good implementation to use.

Use your own subclass of UITableViewCell instead of UItableviewcell. And Customise your cell as you want.

Related

UITableViewController and custom UITableViewCell

Have couple of questions
When I place a UITableViewController on the storyboard, and wish to work with static cells must I create a class deriving from UITableViewController or can I only create a class deriving from UITableViewCell for the custom cell?
I created a custom UITableViewCell placed number of controls on it and tried dragging with control pressed to create an outlet but couldn't, any ideas why?
If I wish each cell to have different controls and behavior can I set each cell a different custom UITableViewCell and if so how does the UITableViewController initialize it? do I need to load it programmatically?
1) The cell must be a subclass of UITableViewCell.
2) No, I don't know why that didn't work, it should. Where were you trying to make the connection to? The cell or the table view controller?
3) Yes, I think this is the best way to do it. Have a different custom cell class for each different kind of cell, and make IBOutlets from the custom cell to its controls. Then just make one IBOutlet from the table view controller to the cell itself (you can then refer to the controls with something like self.cellType1.label1 ...). You don't need to do anything to initialize the cells if they're made in the storyboard.

JSON, cellForRowAtIndexPath bug

Struggling to find where fault is with my code. On first view load, everything works and loads fine as it should, but when i revisit that view, it seems that the first two cells are empty. I logged the dictionary (dict) in viewWillAppear: and it logs the data fine, so error has to be in cellForRow method. Take a look at my method, and see where i'm going wrong, the third cell populate third piece of data, so i'm totally stumped, but the first two cells are completely blank, no data.
http://pastebin.com/Va84MG5g
First of all, why are you doing all of that insane UITableViewCell customization inside of your tableView:cellForRowAtIndexPath: method? Create a custom UITableViewCell subclass and do the set up there.
In the class's initWithStyle: method, add all of your subviews with a frame of CGRectZero, because at initialization, the table view cell doesn't know how big it is. You can set text alignments, colors, etc. here as well. Then, in layoutSubviews, go ahead and set all the frames. Override prepareForReuse and set things like your UIImageViews to nil. This will help with performance for reused cells.
As for why you're not seeing your data in your first two cells, my initial thought is that it has something to do with the way you're setting up your cells for reuse. You're asking your tableView to dequeue a regular UITableViewCell and only creating all of these subviews if the returned cell is nil. So what happens when it returns a UITableViewCell? You skip the part where you alloc/init all these subviews, and so you're basically adding nothing to the cell. I feel if you create a custom subclass and ask your UITableView to dequeue that instead, you'll get the result you're looking for.
NOTE: If you're targeting at least iOS 5, you can create your UITableViewCell's layout in a nib and register the nib with the table view. Doing so will guarantee that you always get a dequeued cell, and you never have to do your if (cell == nil) check. If you're targeting iOS 6, you can register a UITableViewCell subclass.

Proper way to build custom UITableViewCell

I've been wondering about UITableView's and their cells for a while. UITableView is a very handy UIView subclass, but there is a lot of predetermined/forced content on a UITableViewCell. I was wondering what is the best way to create a custom UIView (which will end up being a UITableViewCell) for UITableView?
The cell has a certain style that has to be set and there are predetermined UILabels and accessory views that are completely immutable, other than their contents. I find this to be a big waste, but just giving the cell a custom content view (and background view, if one pleases) doesn't prevent or remove these processes or restore the memory.
Is there any way to create a lighter version of a UITableViewCell subclass? Or is there a way to use a UIView with a selection method instead (other than essentially creating a custom UITableView using UIScrollView)?
Any suggestions would be really appreciated.
There are a few methods:
From a XIB file:
ios steps to create custom UITableViewCell with xib file
http://www.icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/
Using Drawing:
http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007318 (4th and 5th examples)
There doesn't seem to be an answer for this. UITableViewCells will always have UILabels and other views automatically added to them. I'm not sure if they are allocated before you set them, though. They may have custom setting / allocation methods.

UITableViewCell Accessory Views Duplicate In Defferent Sections When Scroll The UitableView

This question make me troubled for a long time, I want to implement defferent accessory views on different cells in my tableview.
And my tableview have multiple sections, But they duplicate onto other cells in my other sections that I have not implemented when I scroll up and down the UITableView. I know someone said "It should be Use different identifiers when you assign dequeueReusableCellWithIdentifier: for each cell in cellForRowAtIndexPath: method before,
But I don't know how to implement programmatically in detail, Anybody can write a sample code in detail help me to understand?
Thank you very much!!!!!
Its all well and good to use different accessory views. But you have to keep in mind that if you are recycling cells, then you first try to recycle, if none available you create a cell, THEN you need to set the appropriate accessory view for the particular cell you are going to return. Who knows what the old one was for a recycled cell...

Is there any way to place two UISearchBar in UITableView?

I have a UITableView with customized UITableViewCells, now i have already placed one UISearchBar to find one of the data in UITableViewCell and it is working fine.
Now i want to do search operation for the other data which is placed in UITableViewCell, so is there a way to place another UISearchBar programmatically?
Yes. It's totally flexible. You just need to create the cell and you can control the placement using the UITableViewDataSource/Delegate methods.