Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

DSchwartz88

macrumors 6502
Original poster
May 18, 2006
419
0
Hey All,

Im having a bit of trouble getting a UITableView to display correctly.

I have images of SMS Style bubbles, and would like the UITableView to display them as such. Right now i have the table displaying with just text, and it looks pretty much like a normal table.

lb1 and lb2 are my labels, and they call lb1.font, lb1.textColor, and etc. I was wondering if there is such a thing as lb1.backgroundPicture or lb1.background. i know there is lb1.backgroundColor, but i need a picture not a single color as my background. Let me know if anyone has any help. Also im having trouble bringing in the picture as a UIImage object, so i can put it in. Any help would be great!

Thanks,
Daniel
 

grimjim

macrumors member
May 24, 2003
75
0
How about...

I haven't tried this, but this might be a way around it:

Add a UIImageView as a subview to each table cell, set its size to be the size of the cell, and set its image property to be the relevant bubble UIImage. That should take care of displaying the bubble.

In order to show the text, apply it as one or more labels, which are also set as subviews of the table cell. Set their backgroundColor properties to be [UIColor clearColor], and the underlying bubble image will show through them. That should give you a bubble with text in it.

As far as your problems with UIImage are concerned, can you be more specific?
 

DSchwartz88

macrumors 6502
Original poster
May 18, 2006
419
0
I haven't tried this, but this might be a way around it:

Add a UIImageView as a subview to each table cell, set its size to be the size of the cell, and set its image property to be the relevant bubble UIImage. That should take care of displaying the bubble.

In order to show the text, apply it as one or more labels, which are also set as subviews of the table cell. Set their backgroundColor properties to be [UIColor clearColor], and the underlying bubble image will show through them. That should give you a bubble with text in it.

As far as your problems with UIImage are concerned, can you be more specific?


Im having trouble, both importing an image into UIImageView and setting UIImageViews size, here is my code:

NSBundle *bundle = [NSBundle mainBundle];
NSString *aqua = [bundle pathForResource:mad:"aqua" ofType:mad:"png"];
UIImage *bubble1 = [[UIImage alloc] initWithContentsOfFile: (NSString *)aqua];

UIImageView *bubble2 = [[[UIImageView alloc] initWithFrame:CGRectMake(5.0, 28.0, 280.0, 15.0)]autorelease];
[bubble2 setImage:bubble1];

[cell.contentView addSubview:bubble2];

Still it doesnt show up once i go to this UITableView.

Any help?
 

grimjim

macrumors member
May 24, 2003
75
0
I'd be tempted to try something like this:

Code:
UIImage *bubble1 = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"aqua" ofType:@"png"]];

UIImageView *bubble2 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 28.0, 280.0, 15.0)];

bubble2.image = bubble1;

[cell addSubview:bubble2];
return cell;

I'm assuming that you're doing this inside the -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath delegate method. Although, if you're intending to re-use aqua.png multiple times, you'd probably do better to set it up in your application delegate, rather than keep reinitialising it every time your table calls the delegate method. And you'll probably want to consider some memory management in that little bit of code, too. I didn't when I thought it up. :)
 

DSchwartz88

macrumors 6502
Original poster
May 18, 2006
419
0
I'd be tempted to try something like this:

Code:
UIImage *bubble1 = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"aqua" ofType:@"png"]];

UIImageView *bubble2 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 28.0, 280.0, 15.0)];

bubble2.image = bubble1;

[cell addSubview:bubble2];
return cell;

I'm assuming that you're doing this inside the -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath delegate method. Although, if you're intending to re-use aqua.png multiple times, you'd probably do better to set it up in your application delegate, rather than keep reinitialising it every time your table calls the delegate method. And you'll probably want to consider some memory management in that little bit of code, too. I didn't when I thought it up. :)

EDIT: got a bit farther

Hey,

So the table now shows up again (had nothing to do with code, the xml files werent loading, but thats fixed now).

But now the bubbles still dont show up, the program compiles fine and runs fine, it just looks the same as before, no bubble.

Any help?

Thanks again
 

grimjim

macrumors member
May 24, 2003
75
0
I'm afraid that I will need to see your code before I can help much more...

For what it's worth, here's the code of a quick and dirty project that I knocked together just to test what I was doing:
Code:
//
//  ImagesInTableAppDelegate.m
//  ImagesInTable
//

#import "ImagesInTableAppDelegate.h"

@implementation ImagesInTableAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {	
	
	contentArray = [[NSArray alloc] initWithObjects:@"One", @"Two", @"Three", nil];
	bubble1 = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Image_1" ofType:@"png"]];

    [window makeKeyAndVisible];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
	return [contentArray count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
	return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
	if (cell == nil) {
		cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 0.0) reuseIdentifier:@"cellID"] autorelease];
	}
	UIImageView *bubble2 = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 40.0)];
	bubble2.image = bubble1;
	UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 3.0, 280.0, 21.0)];
	titleLabel.textColor = [UIColor redColor];
	titleLabel.backgroundColor = [UIColor clearColor];

	titleLabel.text = [contentArray objectAtIndex:indexPath.row];
	
	[cell addSubview:bubble2];
	[cell addSubview:titleLabel];

	
	return cell;
}

- (void)dealloc {
	[window release];
	[super dealloc];
}


@end

It might give you an idea of what could be causing your problem.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.