I can subclass the cell and resolve the problem, but I'd like to know why this doesn't work.
I set an image in the cell, then in this method, I move the image to the right:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell.imageView setFrame:CGRectMake(cell.contentView.bounds.size.width/2 - cell.imageView.frame.size.width/2 + 100,
cell.contentView.bounds.size.height/2 - cell.imageView.frame.size.height/2,
cell.imageView.frame.size.width,
cell.imageView.frame.size.height)];
NSLog(#"center: %#", NSStringFromCGPoint(cell.imageView.center));
NSLog(#"frame: %#", NSStringFromCGRect(cell.imageView.frame));
}
Notice the +100 I added to ensure it's over to the right.
When I check the console, it indicates this:
center: {250, 57.5}
frame: {{150, 7.5}, {200, 100}}
However the output is this:
The image is still aligned to the left side. Can this be changed, and if so, how?
if you go to the header file of UITableViewCell than there you will find...
> // Content. These properties provide direct access to the internal
> label and image views used by the table view cell. These should be
> used instead of the content properties below.
> #property(nonatomic,readonly,retain) UIImageView *imageView
> __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); // default is nil. image view will be created if necessary.
so as you can see it says readOnly property to the image view... I think this explains your inability to move the imageView.
You can not move the image view. Solution is or to subclass and do your own drawing in drawRect, or to add a subview to the cell.contentView.
Edit:
If an image is set, it appears on the left side of the cell, before
any label. UITableViewCell creates the image-view object when you
create the cell.
From UITableViewCell Class Reference
Related
Following is the image i have taken from an app from the App Store:
I have created an app that is using StoryBoard with custom tableview cell. The data is loaded in it from a web service. This is what i want:
1) How can i change the size of the uitableviewcell according to the image? For example if one image is 640*500, then the UITableViewCell will change its size accordingly. If the size if the image is 640*1000, then the cell should change its size accordingly.
2) How can i add the grey coloured border around the tableview cells just like in the image above?
3) How can i add a shadow dropping from the UITableViewCell just like in the image above?
Thanks!
Currently i have a partial answer to your question. Part 2 of the question that is the colored border can be solved by the following code:
[cell.contentView.layer setBorderColor:[UIColor colorWithRed:222/255.0f green:222/255.0f blue:222/255.0f alpha:1.0f].CGColor];
[cell.contentView.layer setBorderWidth:5.0f];
Part-1
The height of the tableviewcell is determined using
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
/*
Get the image size
CGFloat width = myImage.size.width;
CGFloat height = myImage.size.height;
use this to return the height of your cell.
*/
}
Part-2 and Part-3
Use..
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
//This will give you access to the cell being rendered and any customization you want can be done here... You can use the earlier answer for this part.. I havent tried it but should work..
}
Hope this helps..
I have UICollectionView with UICollectionViewCell created in storyboard. I customized cell by adding to it UIImage. After user taps cell I want to show image from particular cell increased by size. To implement that I added UIImageView to view, situated it on top and made:
[previewImage setAlpha:0]; and [previewImage setHidden:YES]; in -viewDidLoad. At -didSelectItemAtIndexPath: I want to set value of image in this UIImageView to the appropriate in touched cell. I tried
previewImage.image = [(CustomCell *)[collectionView cellForItemAtIndexPath:indexPath] image].image;
but it don't works. In logs I see that previewImage.image returns null. So how can I retrieve image value from cell in right way?
Solved by setting previewImage.image this way:
UIImage *preImage = [(CustomCell *)[collectionView cellForItemAtIndexPath:indexPath] image].image;
[previewView setImage:preImage];
hey here you just use the bellow delegate method of UICollectionView
#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
// TODO: Select Item
}
For More info see this UICollectionview-example
i hope this help you..
I am trying to set a custom background for the rows of a grouped UITableView and I have absolutely no idea how to achieve that.
The table design I am trying to apply on my table looks like this:
And I have sliced it into 3 cell types: top, middle and bottom. How can I apply the custom background for each of the table's cells?
You can set UIImageView as cell backgroundView for first, middle and last cell in function:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
Check good (and simple) example at:
http://www.planet1107.net/blog/tips-tutorials/custom-grouped-cell-tutorial/
In cellForRowAtIndexPath, check the type of current row and then assign the corresponding background to it.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Create cell
// ...
// Configure cell
switch (cellType) {
case TOP:
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"top.png"]];
break;
case MIDDLE:
...
}
}
Ray Wenderlich has a very good tutorial on how to do this with Core Graphics: http://www.raywenderlich.com/2033/core-graphics-101-lines-rectangles-and-gradients
This tutorial will give you exactly what you're looking for.
http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
UITableViewCell has an property backgroundView. Set this value in your tableView:cellForRowAtIndexPath:-method.
https://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html
Instead of assigning separate image for each, Create one custom cell and assign background image as cell has above. And Crop above image other than inner cells assign that one to UITableView's background view (Plain table view) i.e you dont need to create grouped table view.
I have a UITableView that is blank be default until the user edits and adds data to it. I want to show an image with instructions that is shown until the user edits it.
The size of the picture is so it fits under perfectly between the nav bar and the tab bar.
Is there a way to do this programmatically?
you can use removeFromSuperview to remove UITableView from super view then add your UIImageView.
Use the below code :
-(void) NeedView:(BOOL) aIsImageView
{
if(aIsImageView)
{
[m_TableView removeFromSuperview];
[self.view addSubviews:m_ImageView];
}
else
{
[m_ImageView removeFromSuperview];
[self.view addSubviews:m_TableView];
}
}
Create a UIView add your UITableView as a subview. Create a UIImageView with your instructions image and add it as a subView as well. Position the instructions imageView behind the the tableView. In ViewWillAppear add a test for empty table and hide the table based on that check. If you allow users to delete rows you will also have to check for empty table in:
- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
// do delete
// get count of rows in UITableView and hide table if it's empty
}
...
It's not that difficult to achieve, you just can show the image you want to show with the specified frame (may be frame(0, 44, 320, 392)). and check for the table rows(actually the count of array that u are using to show in table) if it is nonzero just show the image and show the table otherwise.
try this concept and come back with any problem or query..
I am building a UITableViewCell. I am using the style UITableViewCellStyleSubtitle for my table view cell. In the textLabel of the cell I have data that can require a wrap. So to accomodate, I want to move down the detailTextLabel so that the wrapped text isn't covered by the text in the detailTextLabel. I am attempting the following:
CGPoint tempPoint = tableViewCell.detailTextLabel.center;
tempPoint.y += 100;
tableViewCell.detailTextLabel.center = tempPoint;
I have tried similar approaches with the frame of the label, but I could not get it to move. When I log the y of the center point before and after, I always see it start as 0 and then it is just 100 afterwards. I am using the %f flag in NSLog to view the value. This all occurs in the function:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Any help would be great.
I subclassed UITableViewCell and implemented the - (void)layoutSubviews method. I moved the label in that method.