UITableViewCell with image on the right?

IphoneObjective CUitableviewUiimageviewUiimage

Iphone Problem Overview


Is there a way to set the UITableViewCell.image to display on the right hand side of the cell instead of the left? Or will I need to add a separate UIImageView on the right side of the cell layout?

Iphone Solutions


Solution 1 - Iphone

No. But you can easily add an image view as the accessory view to a table cell for the same effect.

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"foo.png"]];
cell.accessoryView = imageView;
[imageView release];

Solution 2 - Iphone

For simple cases you can do this:

cell.contentView.transform = CGAffineTransformMakeScale(-1,1);
cell.imageView.transform = CGAffineTransformMakeScale(-1,1);
cell.textLabel.transform = CGAffineTransformMakeScale(-1,1);
cell.textLabel.textAlignment = NSTextAlignmentRight; // optional

This will flip (mirror) the content view placing any imageView on the right. Note that you have to flip the imageView and any text labels also otherwise they themselves would be mirrored! This solution preserves the accessory view on the right.

Solution 3 - Iphone

Here is an example in Swift with the approach of using accessoryView:

private let reuseIdentifier: String = "your-cell-reuse-id"

// MARK: UITableViewDataSource

func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  var cell : UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier) as? UITableViewCell
  if (cell == nil) {
    cell = UITableViewCell(style:UITableViewCellStyle.Subtitle, reuseIdentifier:reuseIdentifier)
  }
  
  cell!.textLabel!.text = "Hello"
  cell!.detailTextLabel!.text = "World"
  cell!.accessoryView = UIImageView(image:UIImage(named:"YourImageName")!)
  return cell!
}

Solution 4 - Iphone

If you don't want to make a custom cell and will work with standard one, you have as minimum two ways:

  1. To use accessoryView.

cell.accessoryView = UIImageView(image: UIImage(named: "imageName"))
cell.accessoryView.frame = CGRectMake(0, 0, 22, 22)

2. If you want to have the right image + accessoryView, then you can add UIImageView outlet to ContentView (example name: rightImage) and change background color of textLabel as Clear.

cell.rightImage.image = UIImage(named: "imageName")
cell.textLabel.backgroundColor = UIColor.clearColor()

Solution 5 - Iphone

in swift3 and swift4, we can use this:

cell.accessoryView = UIImageView(image:UIImage(named:"imageNmae")!)

Solution 6 - Iphone

Subclass UITableViewCell and override layoutSubviews and then just adjust the frames of the self.textLabel, self.detailTextLabel and self.imageView views.

This is how it might look like in code:

MYTableViewCell.h:

#import <UIKit/UIKit.h>

@interface MYTableViewCell : UITableViewCell
@end

MYTableViewCell.m:

#import "MYTableViewCell.h"

@implementation MYTableViewCell

- (void)layoutSubviews
{
    [super layoutSubviews];
    if (self.imageView.image) {
        self.imageView.frame = CGRectMake(CGRectGetWidth(self.contentView.bounds) - 32 - 8,
                                          CGRectGetMidY(self.contentView.bounds) - 16.0f,
                                          32,
                                          32);
        CGRect frame = self.textLabel.frame;
        frame.origin.x = 8;
        self.textLabel.frame = frame;
        frame = self.detailTextLabel.frame;
        frame.origin.x = 8;
        self.detailTextLabel.frame = frame;
    }
}

@end

Solution 7 - Iphone

This Soln is for adding different image in each cell....Just a Try

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

if(indexPath.row == 0) {
	cell.image = [UIImage imageNamed:@"image.png"];
}

else if (indexPath.row == 1) {
	cell.image = [UIImage imageNamed:@"image1.png"];
}

Solution 8 - Iphone

To Add image @ Right Hand side in the Cell, I would suggest you to create a Custom cell with imageview on right hand side , it will be very useful for you . and add an empty view to link this nib with customcell class.

Now in your cell's nib file remove the view,add tableViewcell and in that cell drag & drop an imageView to right hand side.

Now go to the TableViewCell's class say DemoCell , create an outlet and set it with the imageview in the tablecell's nib

Now,in tableview's cellforrowatindexpath method reference your cell and use it with the nib name like this

static NSString *CellIdentifier = @"Cell";
DemoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[SettingCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell = [[[NSBundle mainBundle]loadNibNamed:@"DemoCell" owner:self options:nil] lastObject];
}

and set the image as per your requirement

cell.imageVw.img ....

Solution 9 - Iphone

You can resize image in the accessoryview by calling setFrame method of imageview like this: [imageView setFrame:CGRectMake(0, 0, 35.0, 35.0)];

Solution 10 - Iphone

It's unnecessary to create your own image, just edit cell.tintColor.

Solution 11 - Iphone

There is a way to set the position programmatically. Here is the Swift version of the solution:

image.frame = CGRect.init(
x: self.view.frame.width - image.frame.width*1.1,
y: image.frame.origin.y,
width: image.frame.width,
height: image.frame.height)

This will position your image on the right side of the cell. This solution is adjusting automatically the position according to screen size. The only down side is when you rotate the device you need to reload your data, but you can just override in your UITableView class the didRotate listener method:

override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {
    _tableView.reloadData()}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOliver GLView Question on Stackoverflow
Solution 1 - IphoneAlex WayneView Answer on Stackoverflow
Solution 2 - IphoneTomSwiftView Answer on Stackoverflow
Solution 3 - IphoneZorayrView Answer on Stackoverflow
Solution 4 - IphonegerramView Answer on Stackoverflow
Solution 5 - IphoneMohsen mokhtariView Answer on Stackoverflow
Solution 6 - IphoneCamsoftView Answer on Stackoverflow
Solution 7 - Iphoneuser283846View Answer on Stackoverflow
Solution 8 - IphoneiCoderView Answer on Stackoverflow
Solution 9 - Iphoneuser2205998View Answer on Stackoverflow
Solution 10 - Iphonesamthui7View Answer on Stackoverflow
Solution 11 - IphoneEranKTView Answer on Stackoverflow