Reputation: 621
I've been scouring the web trying to figure this out but can't find a clear answer. Here's what's going on:
I've created a UITableViewController
called MainTableViewController
and I have two custom cells that live in that: "FirstCell" and "SecondCell". They both use that naming convention as their reuse identifiers. I've also created cell class files for each: "FirstTableViewCell" and "SecondTableViewCell" that I've assigned each cell accordingly. I've also created IBOutlets
for all the objects in the cells within each UITableViewCell
class file.
So in MainTableViewController
I have no problem getting "FirstCell" loaded. I'm doing that like so:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("FirstCell") as! FirstTableViewCell
cell.friendfirstnameLabel.text = "Michael"
cell.friendImageView.image = UIImage(named: "mikepic")
return cell
}
How do I now call "SecondCell"? I know I will need to change my return to 2. But then how do I change the dequeueReusableCellWithIdentifier
and cellForRowAtIndexPath
code to make both my cells work? "Second Cell" has a radically different layout with different objects defined.
Upvotes: 1
Views: 67
Reputation: 11127
try this
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return yourArrayCount
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row % 2 == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("FirstCell") as! FirstTableViewCell
cell.friendfirstnameLabel.text = "Michael"
cell.friendImageView.image = UIImage(named: "mikepic")
return cell
} else {
let cell = tableView.dequeueReusableCellWithIdentifier("SecondCell") as! SecondTableViewCell
cell.friendfirstnameLabel.text = "Michael"
cell.friendImageView.image = UIImage(named: "mikepic")
return cell
}
}
Upvotes: 1
Reputation: 2186
here i see you have static text to show in the cell view. Usually we have NSArray of data to populate the data in tableview and we define the count in umberOfRowsInSection method so it will be very easy if you know what data you want to display in which cell like that you can easily use If statement for selecting your desire table cellview
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrayCount
}
after checking count you can do this by if statement
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
NSUInteger row = [indexPath row];
if [yourArray objectAtIndex:row] =="Michael" {
let cell = tableView.dequeueReusableCellWithIdentifier("FirstCell") as! FirstTableViewCell
cell.friendfirstnameLabel.text = "Michael"
cell.friendImageView.image = UIImage(named: "mikepic")
return cell
} else {
let cell = tableView.dequeueReusableCellWithIdentifier("SecondCell") as! SecondTableViewCell
cell.friendfirstnameLabel.text = “Unknown"
cell.friendImageView.image = UIImage(named: "mikepic")
return cell
}
}
Upvotes: 0
Reputation: 4047
You should simply change the parameter value you send to dequeueReusableCellWithIdentifier
based on [indexPath row]
. If it's 0, use "firstCell"
and if it's 1, use "secondCell"
and create a cell for the matching object type.
Upvotes: 0
Reputation: 887
You just need to deque your second cell with the reuse identifier assigned. This is completely on your requirements when you want to use first and when second.
Upvotes: 0